AbstractMemory 0.3.1__tar.gz → 0.3.2__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.
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/CHANGELOG.md +16 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/PKG-INFO +2 -2
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/README.md +1 -1
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/api.md +2 -2
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/architecture.md +1 -1
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/faq.md +1 -1
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/troubleshooting.md +1 -1
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/llms-full.txt +6 -6
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/pyproject.toml +1 -1
- abstractmemory-0.3.2/release-notes.md +13 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/journal.py +14 -4
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/system.py +2 -1
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_journal_backends.py +15 -0
- abstractmemory-0.3.1/release-notes.md +0 -12
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/.github/workflows/ci.yml +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/.github/workflows/release.yml +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/.gitignore +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/ACKNOWLEDGMENTS.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/CODE_OF_CONDUCT.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/CONTRIBUTING.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/LICENSE +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/SECURITY.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/README.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/0008_gateway_memory_install_and_config_boundary.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/002_sqlite_database_compatibility_and_store_capabilities.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/004_recall_trace_and_access_events_contract.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/005_source_linked_summaries_and_derived_assertion_lineage.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/007_read_only_memory_observer_contract.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/extension_wave/0037_familiarity_metamemory_read.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/extension_wave/0038_open_commitments_and_triggers.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/extension_wave/0039_tend_election_grammar.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/extension_wave/0049_stable_shelf_order_for_prefix_reuse.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0009_assertion_identity_and_batch_read_contract.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0010_append_only_closure_records_for_retract_and_supersede.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0011_cross_backend_parity_conformance_suite.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0013_store_concurrency_and_thread_safety_contract.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0014_embedding_space_integrity_manifest.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0017_memory_journal_and_scope_bindings_layer.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0018_neurotransmitter_attention_strengthen_weaken_decay.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0019_hybrid_retrieval_channels_fts_vector_exact.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0020_reconstruction_shelf_and_selection_traces.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0021_memory_records_and_remember_api.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0022_probe_and_bounded_source_expansion.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0023_maintenance_sleep_consolidate_dream.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0024_memory_system_facade_and_consumer_migration.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0025_graph_backend_decision_record_memgraph_rejected.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0026_spreading_activation_and_working_set.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0027_runtime_seam_contract_v1.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0029_sleep_reactivity_dreams_as_reaction.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0030_fork_comparison_adoption_wave.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0031_second_fork_pass_and_lifecycle_closure.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/memory_system_v1/0036_third_pass_extension_wave.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/subconscious_wave/0032_dream_subconscious_lifecycle.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/subconscious_wave/0033_world_model_orientation_cards.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/subconscious_wave/0034_situate_temporal_relational_reconstruction.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/completed/subconscious_wave/0035_lessons_layer_conventions.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/deprecated/001_semantics_aligned_memory_record_conventions.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/deprecated/003_bounded_graph_traversal_over_triples.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/deprecated/006_deterministic_anchor_and_facet_index.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/overview.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/planned/extension_wave/README.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/planned/subconscious_wave/README.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0040_recurrence_probe_and_presentation_fold.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0041_loss_absence_anchors.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0042_explain_recall_serving_contract.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0043_mind_health_report.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0044_origin_time_axis_for_imports.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0045_n_party_memory_contract.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0046_transcript_adoption_verb.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0047_cue_hygiene_at_recall_boundary.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/0048_writer_forensics_for_homes.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/README.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/memory_system_v1/0012_lancedb_backend_hardening_and_explicit_schema.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/memory_system_v1/0015_capabilities_extensions_and_deterministic_export_import.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/memory_system_v1/0016_semantics_vocabulary_validation_and_aliasing_module.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/memory_system_v1/0028_lateral_inhibition_theory.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/memory_system_v1/README.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/development.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/getting-started.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/memory-system.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/operator.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/stores.md +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/examples/entity_home_maintenance_proof.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/examples/realistic_session.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/llms.txt +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/__init__.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/alive_drives.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/archive_import.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/attention.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/candidate_miner.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/canonical_text.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/channels.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/cognition_health.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/concept_anchor.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/consolidation.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/diary.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/disposal.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/doctoring.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/dream_resolution.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/dream_signals.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/drive_grouping.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/drive_pressure.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/embedding_pin.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/embeddings.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/embeddings_openai_compat.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/engine_manifest.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/engram.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/entity_card.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/feelings_reads.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/folds.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/gradation.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/identity_review.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/in_memory_store.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/journal_common.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/journal_memory.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/journal_sqlite.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/journal_sqlite_rows.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/lancedb_store.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/maintenance.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/mind_mass.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/models.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/origin_diversity.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/probe.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/recall_reads.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/recent_records.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/reconstruct.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/records.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/redigestion.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/reembed.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/render_order.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/replay.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/seam.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/selection.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/self_component.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/shelf.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/situate.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/sleep_cadence.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/sleep_policy.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/spark.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/spreading.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/sqlite_store.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/store.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/system_access.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/system_valence.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/tend.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/text_tokens.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/vector_scoring.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/world_model.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/world_model_alias.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/conftest.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/golden/pre_identity_wave_result.json +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/realistic_fixtures.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_access_counts.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_alive_drives.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_anchored_summon.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_archive_import.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_attention.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_audit_wave.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_binding_visibility.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_candidate_miner.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_clean_owner_keys.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_close_assertion.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_co_use_trails.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_cognition_health.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_commitments.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_consolidation.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_disposal.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_doctoring.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_dream_resolution.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_dream_signals.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_drive_grouping.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_drive_pressure.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_embedding_pin.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_engine_manifest.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_engram.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_entity_card.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_explain_recall.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_familiarity.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_feelings_reads.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_gradation.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_home_lease_contract.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_identity_review.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_identity_self.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_in_memory_query_text_fallback.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_keyword_fts.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_lancedb_triple_store.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_lessons_layer.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_maintenance.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_mind_mass.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_origin_diversity.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_participants_channel.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_phase_artifact_pin.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_probe.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_realistic_lmstudio.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_recall_reads.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_recent_records.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_reconstruct.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_records.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_redigestion.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_render_order.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_replay.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_replay_idempotency.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_review_wave.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_seam_addendum.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_seam_contracts.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_situate.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_spark.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_spreading.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_sqlite_triple_store.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_stm_union.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_store_vectors.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_system.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_tend.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_term_canonicalization.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_triple_store_limits.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_two_sided_visit_contract.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_valence_gradation.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_world_model.py +0 -0
- {abstractmemory-0.3.1 → abstractmemory-0.3.2}/tests/test_world_model_alias.py +0 -0
|
@@ -9,6 +9,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
*No unreleased changes.*
|
|
11
11
|
|
|
12
|
+
## [0.3.2] - 2026-10-20
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **A third closure kind, `reinterpreted`**, for an assertion whose reading was
|
|
17
|
+
superseded by a re-interpretation of its source: the writer no longer reads
|
|
18
|
+
that source this way (for example, AbstractNote understanding a note again
|
|
19
|
+
against an earlier foundation withdraws its previous reading). It is neither
|
|
20
|
+
`retract` (the fact was wrong) nor `supersede` (a later fact replaced it).
|
|
21
|
+
`ClosureRecord`, `close_assertions` and `close_record` accept it;
|
|
22
|
+
`replacement_ids` is optional (the new reading's assertions, when there are
|
|
23
|
+
any); like the other kinds, a `reinterpreted` closure takes the assertion out
|
|
24
|
+
of ranked retrieval while it stays in the store and in history. The accepted
|
|
25
|
+
kinds are listed in `abstractmemory.journal.CLOSURE_KINDS`.
|
|
26
|
+
Additive: existing callers and stored journals are unaffected.
|
|
27
|
+
|
|
12
28
|
## [0.3.1] - 2026-10-19
|
|
13
29
|
|
|
14
30
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractMemory
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: AbstractMemory: temporal, provenance-aware semantic memory primitives for AbstractFramework.
|
|
5
5
|
Project-URL: AbstractFramework (monorepo), https://github.com/lpalbou/abstractframework
|
|
6
6
|
Author: Laurent-Philippe Albou
|
|
@@ -164,7 +164,7 @@ system.commit_selection(result.trace_id, [h.record_id for h in result.handles[:2
|
|
|
164
164
|
|
|
165
165
|
## Design principles
|
|
166
166
|
|
|
167
|
-
- **Append-only, no deletion**: updates are new assertions; belief revision is closure records (retract/supersede); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
|
|
167
|
+
- **Append-only, no deletion**: updates are new assertions; belief revision is closure records (retract/supersede/reinterpreted); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
|
|
168
168
|
- **Reads are pure**: reconstruction, inspection, replay, and the entity card deposit nothing. `commit_selection` is the only strengthening path.
|
|
169
169
|
- **One seq axis**: the journal assigns a monotonic `seq` to every record; any past state is reproducible by anchoring reads at `as_of`.
|
|
170
170
|
- **Works-or-loud**: degraded paths are labeled `#FALLBACK` in result warnings; invalid inputs raise actionable errors instead of silently meaning something else.
|
|
@@ -128,7 +128,7 @@ system.commit_selection(result.trace_id, [h.record_id for h in result.handles[:2
|
|
|
128
128
|
|
|
129
129
|
## Design principles
|
|
130
130
|
|
|
131
|
-
- **Append-only, no deletion**: updates are new assertions; belief revision is closure records (retract/supersede); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
|
|
131
|
+
- **Append-only, no deletion**: updates are new assertions; belief revision is closure records (retract/supersede/reinterpreted); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
|
|
132
132
|
- **Reads are pure**: reconstruction, inspection, replay, and the entity card deposit nothing. `commit_selection` is the only strengthening path.
|
|
133
133
|
- **One seq axis**: the journal assigns a monotonic `seq` to every record; any past state is reproducible by anchoring reads at `as_of`.
|
|
134
134
|
- **Works-or-loud**: degraded paths are labeled `#FALLBACK` in result warnings; invalid inputs raise actionable errors instead of silently meaning something else.
|
|
@@ -135,7 +135,7 @@ Record families (all append-only, all `seq`-stamped by the journal):
|
|
|
135
135
|
|
|
136
136
|
- `MemoryEvent` — attention events. Scoring kinds: `selected`, `co_selected` (pair trails), `pinned`, `silenced`; decay marker: `refocus`; audit-only (recorded, never scored): `listed`, `shown`, `expanded`, `cited`.
|
|
137
137
|
- `ScopeBinding` — visibility: `search_state` (`indexed`/`hidden`), `prompt_state` (`active`/`inactive`), `lifecycle`, `source`, `reason`. Latest per `(record_id, scope, owner_id)` wins; `fold_bindings(bindings)` applies that fold.
|
|
138
|
-
- `ClosureRecord` — belief lifecycle: `kind` (`retract`/`supersede`), mandatory `reason`, `replacement_ids` (required for supersede).
|
|
138
|
+
- `ClosureRecord` — belief lifecycle: `kind` (`retract`/`supersede`/`reinterpreted`), mandatory `reason`, `replacement_ids` (required for supersede, optional otherwise). `reinterpreted` means the writer no longer reads its source this way (a note understood again): neither a correction nor a later fact; it leaves ranked retrieval like the others.
|
|
139
139
|
- `ReconstructionTrace` — one recall: fingerprint, searched scopes, candidates, selected/dropped, cues, budgets, admission labels, warnings.
|
|
140
140
|
- `ActiveMemorySnapshot` — see seam types.
|
|
141
141
|
- `ValenceEvent` — signed appraisals and standing markers (see valence below).
|
|
@@ -186,7 +186,7 @@ Diary formation rules: `kind="diary"` requires `provenance.source` ∈ {`diary-p
|
|
|
186
186
|
### Bindings and closures
|
|
187
187
|
|
|
188
188
|
- `bind(record_id, *, scope, owner_id, search_state, prompt_state="inactive", lifecycle="none", source="operator", reason=None, binding_id=None) -> ScopeBinding` — append a visibility event. A folded `hidden` binding removes the record from ranked retrieval in that scope pair only; re-binding `indexed` restores it. `prompt_state="active"` admits the record into the identity (self) component. Record-level bindings hide the digest and its edge assertions together. Direct `store.query` id lookups bypass folds by design.
|
|
189
|
-
- `close_assertions(assertion_ids, *, kind, replacement_ids=(), reason) -> list[str]` — append one closure per assertion (`retract` | `supersede`).
|
|
189
|
+
- `close_assertions(assertion_ids, *, kind, replacement_ids=(), reason) -> list[str]` — append one closure per assertion (`retract` | `supersede` | `reinterpreted`).
|
|
190
190
|
- `close_record(record_id, *, reason, kind="retract", replacement_ids=()) -> list[str]` — close a whole record (digest and its edges) as one belief-revision act; closure ids are deterministic, so replays dedupe.
|
|
191
191
|
|
|
192
192
|
### Identity: spark, engram, self core, floors
|
|
@@ -62,7 +62,7 @@ The same discipline extends to every derived read: inspection (`activation`, `ac
|
|
|
62
62
|
There is no delete surface anywhere in the package:
|
|
63
63
|
|
|
64
64
|
- Updates are new assertions with fresh provenance.
|
|
65
|
-
- Belief revision is a `ClosureRecord` (`retract` or `
|
|
65
|
+
- Belief revision is a `ClosureRecord` (`retract`, `supersede` with replacements, or `reinterpreted` when the writer reads the source differently) — the old record leaves ranked retrieval but remains in the store and in history.
|
|
66
66
|
- Visibility is a `ScopeBinding` fold (latest per record/scope/owner wins): `hidden` removes a record from ranked retrieval in that scope pair only; re-binding `indexed` restores it.
|
|
67
67
|
- Forgetting is decay of retrieval strength plus closures and silencing. Storage never decays; only the temporal-access signal does. The global access count (`selected_count`) never decays at all.
|
|
68
68
|
|
|
@@ -39,7 +39,7 @@ Canonicalization (trim + lowercase) is part of the matching contract: it prevent
|
|
|
39
39
|
There is no update or delete API, by design:
|
|
40
40
|
|
|
41
41
|
- At layer 1, represent changes by adding a new assertion with fresh provenance. When the new assertion supersedes an earlier one, `close_assertion(assertion_id, valid_until)` (in-memory and SQLite stores) closes the earlier validity window in place, so `TripleQuery(active_at=...)` stops returning it from that moment; nothing else about the row changes.
|
|
42
|
-
- At layer 2, belief revision is a closure record (`close_record` / `close_assertions`: retract
|
|
42
|
+
- At layer 2, belief revision is a closure record (`close_record` / `close_assertions`: retract, supersede with replacements, or reinterpreted when the source is read differently) — the old record leaves ranked retrieval but stays in the store and in history. Visibility can also be withdrawn per scope with a `hidden` binding and restored with `indexed`.
|
|
43
43
|
- Forgetting is decay of retrieval strength plus closures and silencing. The substrate is lossless; there is no compaction.
|
|
44
44
|
|
|
45
45
|
## What do `scope` and `owner_id` mean?
|
|
@@ -70,7 +70,7 @@ explain_recall(store, journal, record_id, trace_id=trace_id)
|
|
|
70
70
|
recall_history(journal, record_id)
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
`absence_diagnosis` reports structural reasons in plain sentences (never formed, retracted, hidden, out of scope, vectorless). `explain_recall` answers the same question against one specific recall. Common structural causes: the record is in a scope the ladder does not include; a closure retracted or
|
|
73
|
+
`absence_diagnosis` reports structural reasons in plain sentences (never formed, retracted, hidden, out of scope, vectorless). `explain_recall` answers the same question against one specific recall. Common structural causes: the record is in a scope the ladder does not include; a closure retracted, superseded or reinterpreted it; it is an inactive candidate; or it was formed after the `as_of` seq you anchored to.
|
|
74
74
|
|
|
75
75
|
### Recall results change between runs with the same input
|
|
76
76
|
|
|
@@ -154,7 +154,7 @@ system.commit_selection(result.trace_id, [h.record_id for h in result.handles[:2
|
|
|
154
154
|
|
|
155
155
|
## Design principles
|
|
156
156
|
|
|
157
|
-
- **Append-only, no deletion**: updates are new assertions; belief revision is closure records (retract/supersede); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
|
|
157
|
+
- **Append-only, no deletion**: updates are new assertions; belief revision is closure records (retract/supersede/reinterpreted); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
|
|
158
158
|
- **Reads are pure**: reconstruction, inspection, replay, and the entity card deposit nothing. `commit_selection` is the only strengthening path.
|
|
159
159
|
- **One seq axis**: the journal assigns a monotonic `seq` to every record; any past state is reproducible by anchoring reads at `as_of`.
|
|
160
160
|
- **Works-or-loud**: degraded paths are labeled `#FALLBACK` in result warnings; invalid inputs raise actionable errors instead of silently meaning something else.
|
|
@@ -389,7 +389,7 @@ The same discipline extends to every derived read: inspection (`activation`, `ac
|
|
|
389
389
|
There is no delete surface anywhere in the package:
|
|
390
390
|
|
|
391
391
|
- Updates are new assertions with fresh provenance.
|
|
392
|
-
- Belief revision is a `ClosureRecord` (`retract` or `
|
|
392
|
+
- Belief revision is a `ClosureRecord` (`retract`, `supersede` with replacements, or `reinterpreted` when the writer reads the source differently) — the old record leaves ranked retrieval but remains in the store and in history.
|
|
393
393
|
- Visibility is a `ScopeBinding` fold (latest per record/scope/owner wins): `hidden` removes a record from ranked retrieval in that scope pair only; re-binding `indexed` restores it.
|
|
394
394
|
- Forgetting is decay of retrieval strength plus closures and silencing. Storage never decays; only the temporal-access signal does. The global access count (`selected_count`) never decays at all.
|
|
395
395
|
|
|
@@ -664,7 +664,7 @@ Record families (all append-only, all `seq`-stamped by the journal):
|
|
|
664
664
|
|
|
665
665
|
- `MemoryEvent` — attention events. Scoring kinds: `selected`, `co_selected` (pair trails), `pinned`, `silenced`; decay marker: `refocus`; audit-only (recorded, never scored): `listed`, `shown`, `expanded`, `cited`.
|
|
666
666
|
- `ScopeBinding` — visibility: `search_state` (`indexed`/`hidden`), `prompt_state` (`active`/`inactive`), `lifecycle`, `source`, `reason`. Latest per `(record_id, scope, owner_id)` wins; `fold_bindings(bindings)` applies that fold.
|
|
667
|
-
- `ClosureRecord` — belief lifecycle: `kind` (`retract`/`supersede`), mandatory `reason`, `replacement_ids` (required for supersede).
|
|
667
|
+
- `ClosureRecord` — belief lifecycle: `kind` (`retract`/`supersede`/`reinterpreted`), mandatory `reason`, `replacement_ids` (required for supersede, optional otherwise). `reinterpreted` means the writer no longer reads its source this way (a note understood again): neither a correction nor a later fact; it leaves ranked retrieval like the others.
|
|
668
668
|
- `ReconstructionTrace` — one recall: fingerprint, searched scopes, candidates, selected/dropped, cues, budgets, admission labels, warnings.
|
|
669
669
|
- `ActiveMemorySnapshot` — see seam types.
|
|
670
670
|
- `ValenceEvent` — signed appraisals and standing markers (see valence below).
|
|
@@ -715,7 +715,7 @@ Diary formation rules: `kind="diary"` requires `provenance.source` ∈ {`diary-p
|
|
|
715
715
|
### Bindings and closures
|
|
716
716
|
|
|
717
717
|
- `bind(record_id, *, scope, owner_id, search_state, prompt_state="inactive", lifecycle="none", source="operator", reason=None, binding_id=None) -> ScopeBinding` — append a visibility event. A folded `hidden` binding removes the record from ranked retrieval in that scope pair only; re-binding `indexed` restores it. `prompt_state="active"` admits the record into the identity (self) component. Record-level bindings hide the digest and its edge assertions together. Direct `store.query` id lookups bypass folds by design.
|
|
718
|
-
- `close_assertions(assertion_ids, *, kind, replacement_ids=(), reason) -> list[str]` — append one closure per assertion (`retract` | `supersede`).
|
|
718
|
+
- `close_assertions(assertion_ids, *, kind, replacement_ids=(), reason) -> list[str]` — append one closure per assertion (`retract` | `supersede` | `reinterpreted`).
|
|
719
719
|
- `close_record(record_id, *, reason, kind="retract", replacement_ids=()) -> list[str]` — close a whole record (digest and its edges) as one belief-revision act; closure ids are deterministic, so replays dedupe.
|
|
720
720
|
|
|
721
721
|
### Identity: spark, engram, self core, floors
|
|
@@ -1280,7 +1280,7 @@ Canonicalization (trim + lowercase) is part of the matching contract: it prevent
|
|
|
1280
1280
|
There is no update or delete API, by design:
|
|
1281
1281
|
|
|
1282
1282
|
- At layer 1, represent changes by adding a new assertion with fresh provenance. When the new assertion supersedes an earlier one, `close_assertion(assertion_id, valid_until)` (in-memory and SQLite stores) closes the earlier validity window in place, so `TripleQuery(active_at=...)` stops returning it from that moment; nothing else about the row changes.
|
|
1283
|
-
- At layer 2, belief revision is a closure record (`close_record` / `close_assertions`: retract
|
|
1283
|
+
- At layer 2, belief revision is a closure record (`close_record` / `close_assertions`: retract, supersede with replacements, or reinterpreted when the source is read differently) — the old record leaves ranked retrieval but stays in the store and in history. Visibility can also be withdrawn per scope with a `hidden` binding and restored with `indexed`.
|
|
1284
1284
|
- Forgetting is decay of retrieval strength plus closures and silencing. The substrate is lossless; there is no compaction.
|
|
1285
1285
|
|
|
1286
1286
|
## What do `scope` and `owner_id` mean?
|
|
@@ -1413,7 +1413,7 @@ explain_recall(store, journal, record_id, trace_id=trace_id)
|
|
|
1413
1413
|
recall_history(journal, record_id)
|
|
1414
1414
|
```
|
|
1415
1415
|
|
|
1416
|
-
`absence_diagnosis` reports structural reasons in plain sentences (never formed, retracted, hidden, out of scope, vectorless). `explain_recall` answers the same question against one specific recall. Common structural causes: the record is in a scope the ladder does not include; a closure retracted or
|
|
1416
|
+
`absence_diagnosis` reports structural reasons in plain sentences (never formed, retracted, hidden, out of scope, vectorless). `explain_recall` answers the same question against one specific recall. Common structural causes: the record is in a scope the ladder does not include; a closure retracted, superseded or reinterpreted it; it is an inactive candidate; or it was formed after the `as_of` seq you anchored to.
|
|
1417
1417
|
|
|
1418
1418
|
### Recall results change between runs with the same input
|
|
1419
1419
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "AbstractMemory"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.2"
|
|
8
8
|
description = "AbstractMemory: temporal, provenance-aware semantic memory primitives for AbstractFramework."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
### Added
|
|
2
|
+
|
|
3
|
+
- **A third closure kind, `reinterpreted`**, for an assertion whose reading was
|
|
4
|
+
superseded by a re-interpretation of its source: the writer no longer reads
|
|
5
|
+
that source this way (for example, AbstractNote understanding a note again
|
|
6
|
+
against an earlier foundation withdraws its previous reading). It is neither
|
|
7
|
+
`retract` (the fact was wrong) nor `supersede` (a later fact replaced it).
|
|
8
|
+
`ClosureRecord`, `close_assertions` and `close_record` accept it;
|
|
9
|
+
`replacement_ids` is optional (the new reading's assertions, when there are
|
|
10
|
+
any); like the other kinds, a `reinterpreted` closure takes the assertion out
|
|
11
|
+
of ranked retrieval while it stays in the store and in history. The accepted
|
|
12
|
+
kinds are listed in `abstractmemory.journal.CLOSURE_KINDS`.
|
|
13
|
+
Additive: existing callers and stored journals are unaffected.
|
|
@@ -221,12 +221,22 @@ class ScopeBinding:
|
|
|
221
221
|
return _jsonify(asdict(self))
|
|
222
222
|
|
|
223
223
|
|
|
224
|
+
#: The closure kinds a ClosureRecord accepts (``reinterpreted`` is additive, 0.3.2).
|
|
225
|
+
CLOSURE_KINDS = frozenset({"retract", "supersede", "reinterpreted"})
|
|
226
|
+
|
|
227
|
+
|
|
224
228
|
@dataclass(frozen=True)
|
|
225
229
|
class ClosureRecord:
|
|
226
|
-
"""Append-only belief-lifecycle record (backlog 0010): retract or
|
|
230
|
+
"""Append-only belief-lifecycle record (backlog 0010): retract, supersede or reinterpreted.
|
|
231
|
+
|
|
232
|
+
``reinterpreted`` (additive, 0.3.2): the writer no longer reads its source this way (AbstractNote ADR 0008: a
|
|
233
|
+
note understood again against an earlier foundation withdraws its previous reading). It is neither a
|
|
234
|
+
correction of the fact (``retract``) nor a later fact replacing it (``supersede``); like both it leaves
|
|
235
|
+
ranked retrieval. ``replacement_ids`` is optional (the new reading's assertions, when there are any).
|
|
236
|
+
"""
|
|
227
237
|
|
|
228
238
|
assertion_id: str
|
|
229
|
-
kind: str # retract | supersede
|
|
239
|
+
kind: str # retract | supersede | reinterpreted
|
|
230
240
|
reason: str
|
|
231
241
|
replacement_ids: Tuple[str, ...] = ()
|
|
232
242
|
observed_at: str = field(default_factory=utc_now_iso)
|
|
@@ -240,8 +250,8 @@ class ClosureRecord:
|
|
|
240
250
|
raise ValueError("ClosureRecord requires assertion_id")
|
|
241
251
|
object.__setattr__(self, "assertion_id", self.assertion_id.strip())
|
|
242
252
|
kind = str(self.kind or "").strip().lower()
|
|
243
|
-
if kind not in
|
|
244
|
-
raise ValueError("ClosureRecord.kind must be 'retract' or '
|
|
253
|
+
if kind not in CLOSURE_KINDS:
|
|
254
|
+
raise ValueError("ClosureRecord.kind must be 'retract', 'supersede' or 'reinterpreted'")
|
|
245
255
|
object.__setattr__(self, "kind", kind)
|
|
246
256
|
if not (isinstance(self.reason, str) and self.reason.strip()):
|
|
247
257
|
raise ValueError("ClosureRecord requires a non-empty reason")
|
|
@@ -853,7 +853,8 @@ class MemorySystem(ValenceOps, AccessOps):
|
|
|
853
853
|
replacement_ids: Sequence[str] = (),
|
|
854
854
|
reason: str,
|
|
855
855
|
) -> List[str]:
|
|
856
|
-
"""Append one ClosureRecord per assertion (retract | supersede
|
|
856
|
+
"""Append one ClosureRecord per assertion (retract | supersede |
|
|
857
|
+
reinterpreted);
|
|
857
858
|
returns closure ids. Supersede requires replacement_ids; reason is
|
|
858
859
|
mandatory — validated by ClosureRecord BEFORE any append. A multi-
|
|
859
860
|
assertion supersede shares one replacement set. Accepts either id
|
|
@@ -462,6 +462,21 @@ def test_record_validation_errors_surface() -> None:
|
|
|
462
462
|
make_event(kind="co_selected", pair_ids=("rec-a", "rec-a"))
|
|
463
463
|
|
|
464
464
|
|
|
465
|
+
def test_reinterpreted_closure_kind(journal) -> None:
|
|
466
|
+
"""Additive closure kind (0.3.2): a source read again withdraws its previous reading; replacements optional."""
|
|
467
|
+
from abstractmemory.journal import CLOSURE_KINDS
|
|
468
|
+
|
|
469
|
+
assert "reinterpreted" in CLOSURE_KINDS
|
|
470
|
+
journal.append_closure(make_closure(assertion_id="as-r", kind="reinterpreted", reason="read again"))
|
|
471
|
+
journal.append_closure(make_closure(assertion_id="as-s", kind="REINTERPRETED", reason="read again",
|
|
472
|
+
replacement_ids=("as-t",)))
|
|
473
|
+
got = {c.assertion_id: c for c in journal.closures()}
|
|
474
|
+
assert got["as-r"].kind == "reinterpreted" and got["as-r"].replacement_ids == ()
|
|
475
|
+
assert got["as-s"].kind == "reinterpreted" and got["as-s"].replacement_ids == ("as-t",)
|
|
476
|
+
with pytest.raises(ValueError, match="kind"):
|
|
477
|
+
make_closure(kind="revised")
|
|
478
|
+
|
|
479
|
+
|
|
465
480
|
# ---------------------------------------------------------------------------
|
|
466
481
|
# JSON round-trip
|
|
467
482
|
# ---------------------------------------------------------------------------
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
### Added
|
|
2
|
-
|
|
3
|
-
- **`close_assertion(assertion_id, valid_until)`** on `SQLiteTripleStore` and
|
|
4
|
-
`InMemoryTripleStore`: closes an assertion's open validity window in place
|
|
5
|
-
(only while `valid_until` is still empty; terms, provenance, attributes,
|
|
6
|
-
keyword index and vector are untouched) and returns whether a row changed
|
|
7
|
-
(`False` for an unknown id or a window that is already closed). A writer
|
|
8
|
-
that supersedes a fact can make `TripleQuery(active_at=...)` agree with its
|
|
9
|
-
own belief window, where a layer-2 closure record only reaches ranked
|
|
10
|
-
retrieval. Existing callers are unaffected; `add` stays append-only and
|
|
11
|
-
`LanceDBTripleStore` keeps the protocol surface (`add`, `query`, `close`).
|
|
12
|
-
Contributed by the AbstractNote lane.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/planned/subconscious_wave/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/extension_wave/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractmemory-0.3.1 → abstractmemory-0.3.2}/docs/backlog/proposed/memory_system_v1/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractmemory-0.3.1 → abstractmemory-0.3.2}/src/abstractmemory/embeddings_openai_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|