topos-node 1.3.40__tar.gz → 1.3.41__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.
- {topos_node-1.3.40/topos_node.egg-info → topos_node-1.3.41}/PKG-INFO +1 -1
- {topos_node-1.3.40 → topos_node-1.3.41}/pyproject.toml +1 -1
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/__version__.py +2 -2
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/graph_summary.py +5 -1
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/projection.py +9 -1
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/edges.py +12 -2
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/graph_refresh.py +55 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/canonical_pipeline.py +26 -24
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/upgrades/manifests.json +6 -0
- {topos_node-1.3.40 → topos_node-1.3.41/topos_node.egg-info}/PKG-INFO +1 -1
- {topos_node-1.3.40 → topos_node-1.3.41}/LICENSE +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/MANIFEST.in +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/README.md +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/setup.cfg +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/shared/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/shared/filtering.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/shared/schema_registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_active_database_binding.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_active_ingestion_binding.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_extensions.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_gate_leg_hermeticity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_llm_integrations_storage.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_local_gate_composition.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_owner_database_hermeticity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_prewarm_first_run.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_profile_hygiene.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_profiles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_protocol_handled_types.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_query_field_contract.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/tests/test_system_computer_name.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/dataset_resolution.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/luck_surface.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/messenger_directed.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/person_graph.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/person_overlay.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/profiles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/query_engine.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/raw_queries.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/analytics/relationship_reads.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/analytics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/app_registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/backup.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/community_naming_config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/compute_remote.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/connected_apps.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/conversation_context.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/data_commit.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/database_explorer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/db.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/device.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/disk_space_config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/engine_run.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/enrichment.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/enrichment_lab.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/facts_llm_config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/filter_lab.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/health.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/home_chat.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/ingestion_api.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/ingestion_compat.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/ingestion_sources.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/intelligence_lifecycle.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/llm.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/local_mcp.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/messenger_analytics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/privacy_disclose.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/query_api.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/runtime_bootstrap.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/shell.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/signal.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/signal_extraction_config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/source_install.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/source_scrub.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/sources.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/sources_overview.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/sync.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/tool_index.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/ui_config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/uma_data.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/upgrades.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/usage.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/api/user_identity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/app.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/auth.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/declared_field_map.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/demo_mappers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/documents_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/github_activity_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/google_calendar_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/models.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/resolver.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/__main__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/assets/topos_blk_rounded.png +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/assets/topos_white.png +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/commands.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/profile_cmd.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/reprocess_cmd.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/setup_models_cmd.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/cli/tray.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/conversation_context_llm.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/facts_llm.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/local_model_builds.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/model_packs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/node_function_providers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/settings.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/signal_extraction.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/config/uvicorn_logging.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/contacts/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/contacts/identity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/control_plane_client.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/api_models.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/connection_resilience.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/db_health.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/device_helpers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/errors.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/events.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/common.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/complexity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/config.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/contacts_import.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/database_explorer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/derivation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/device.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/enrichment.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/enrichment_lab.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/filter_lab.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/graph_query.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/home_chat.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/ingest.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/mcp_client_elevations.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/mcp_clients.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/messages.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/messenger_analytics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/query.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/routines.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/signal_features.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/sources.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/timeline_daily.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/tool_index.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/handlers/uma.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/logging.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/metrics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/routine_access.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/startup_banner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/state.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/table_layers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/core/types.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/data_explorer_row_delete.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/data_explorer_tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/defaults.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/disclosure/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/disclosure/canonical_writer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/disclosure/content_policy.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/disclosure/field_registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/disclosure/privacy_layer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/disclosure/tier.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/generative_prompts.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/generative_response.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/ollama.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/openai.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/openai_compatible.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/redpill.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/backends/stub.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/client.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/disk_space.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/engine.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/hosted_llm_wallet.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/intake.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/memory_utils.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/model_cache.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/model_manager.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/ollama_install.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/ollama_pull.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/ollama_runtime.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/ollama_setup_guidance.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/pipeline_memory.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/queue_manager.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/registration.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/result_formatter.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/router.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/scoped_token.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/tasks.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/torch_runtime.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/transport.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/usage_guard.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/usage_observation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/engine/validator.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/catalog.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/derivation_recovery.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/job_readiness.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/job_writer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/attention_triage_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/complexity_snapshot_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/derivation_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/derived_object_embeddings_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/fact_extraction_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/statistics_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/timeline_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/model_overrides.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/models/manager.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/models/mvp_defaults.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/models/registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/pipeline_activity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/processor.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/record_progress.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/registry_contract.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/signal_derivation_config.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment/source_overrides.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/bundles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/model_resolve.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/schema.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/service.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/enrichment_lab/worker.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/evals/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/evals/enrichment_eval.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/extensions.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/canonical.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/engine.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/entropy.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/focus.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/graph_metrics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/influence.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/snapshots.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/topic_merge.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/topics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/topics_daily.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/complexity/volatility.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/_scales.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/admin.legal.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/aspirations.goals.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/behavior.habits.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/behavior.preferences.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/beliefs.civic.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/beliefs.spiritual.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/communication.style.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/community.membership.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/craft.tooling.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/expertise.knowledge.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/finances.economics.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/health.lifestyle.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/health.mental.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/health.physical.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/household.pets.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/identity.core.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/interests.taste.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/life.events.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/narrative.self.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/net.capability.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/obligations.commitments.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/personality.traits.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/places.mobility.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/possessions.assets.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/relationships.social.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/values.motivation.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/dispositions.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/expertise.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/habits.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/interests.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/preferences.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/stances.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/tools.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/vocab/values.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/bundled_packs/work.career.yaml +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/candidates.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/guard.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/kernels.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/net_subject_policy.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/packs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/person_bridge.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/prefilter.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/report_card.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/router.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/social_bench.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/social_kernels.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/surfaces.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/synthesize.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/template.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/verify.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/derivation/writer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/affinity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/affinity_owner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/affinity_quality.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/chatgpt_declared.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/community_names.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/community_naming.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/consolidation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/context_vectors.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/cypher.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/declared_mappings.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/dossier.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/fact_materializer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/graph_enrichers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/graph_search.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/linking.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/maintenance.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/owner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/reads.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/rebuild_subprocess.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/resolver.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/entities/structured_fields.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/facts/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/facts/extract.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/facts/llm_extract.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/facts/reads.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/facts/store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/facts/verdicts.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/fit/evaluator.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/fit/opportunity_types.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/blackhole.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/blackhole_guard.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/blackhole_llm.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/blackhole_rebuild.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/derived_scrub.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/exclusions.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/lifecycle/gc.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/provenance/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/provenance/posture.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/provenance/roles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/brief_canonical_loader.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/brief_ontology.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/brief_renderer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/brief_schemas.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/chunking.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/cluster_labels.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/conversation_context.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/conversation_windows.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/data_health.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/brief_ontologies.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/intentions.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/interests.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/memory.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/places.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/profile.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/relationships.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/resources.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/schema/dimension_definition.schema.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/time.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/wellbeing.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/definitions/work.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/derived_index.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/derived_spec.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/dimension_briefs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/dimension_definition_loader.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/dimension_profiles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/dimension_registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/embed_context.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/extraction/artifact_router.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/extraction/artifact_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/extraction/rule_extractors.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/graph_sanitize.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/hybrid_search.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/incremental_clustering.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/model_recommendations.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/query_embed_cache.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/schemas.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/service.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/signal_object_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/source_hydration.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/structured_signal.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/tool_index.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/topic_clustering.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/typed_stores/aggregates.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/typed_stores/commitments.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/typed_stores/rhythm.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/vector_codec.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/vector_math.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/signal/vector_settings.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/stats/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/stats/definitions.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/stats/engine.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/stats/fold.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/stats/insights.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/timeline_projection.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/timeline_rollup.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/badges.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/daily.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/dashboard.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/instruments.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/intents.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/features/triage/readiness.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/filter_lab/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/filter_lab/bundles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/filter_lab/schema.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/filter_lab/service.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/filter_lab/store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/filter_lab/worker.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/home_chat/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/home_chat/schema.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/home_chat/store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/hosted_pool_lease.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/inbox_crypto.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/inbox_drain.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/ingest_helpers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/jobs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/journal_location_fanout.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/journal_time_log_normalize.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/local_exports.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/local_sync.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/log_preview.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/manager.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/chatgpt_export.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/documents_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/github_activity_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/google_calendar_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/parsers/voxterm_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/progress.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/reprocess.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/state_machine.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/usage_inbox_dedupe.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/validation/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/lineage/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/lineage/provenance.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/lineage/tracker.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/llm_integrations_storage.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/mcp_clients.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/observability/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/observability/alerts.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/observability/metrics.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/observability/tracing.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/openai_client.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/owner_key.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/audit.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/envelope.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/job_runner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/job_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/stages.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/pipeline/stub_enqueue.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/principal.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/profiles.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/projections/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/projections/vector_index/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/protocol/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/protocol/handled_message_types.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/protocol/narrowing_vocabulary.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/protocol/query_field_contract.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/audit.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/closeness.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/cohort_resolvers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/collaborators.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/ddr.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/disclosure.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/entity_window.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/exclusion.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/facts_direct.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/fingerprint.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/game_layer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/grant_cache.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/inference.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/intent.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/manifest.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/manifest_validation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/minimizer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/narrowing.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/negotiation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/packet_resolution.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/pipeline.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/planner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/retrieval.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/runtime.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/scope_arbiter.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/scope_classifier.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/scope_head.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/scope_registry.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/scope_registry_loader.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/scope_shadow.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/session.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/session_utils.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/source_generation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/truth_facts.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/truth_prompts.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/turn_classifier.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/types.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/verify.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/query/verify_modes.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/rate_limit.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/relay_stamp.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/routines/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/routines/schema.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/routines/store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/runtime_housekeeping.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/runtime_shutdown.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/runtime_update.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sanitization/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sanitization/nsfw_classifier.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sanitization/prewarm.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sanitization/privacy_filter.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/scope_resolution.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/container.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/embeddings/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/embeddings/local.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/embeddings/remote.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/interfaces.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/llm/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/llm/base.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/llm/openai.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/local.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/services/postgres.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/bundled_canonical_triples.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/canonical_signal_defaults.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/declared_field_map_spec.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/definitions.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/install_service.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/runtime_install.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/scrub_attribution.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sources/scrub_service.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/startup_banner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/factory.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/fakes.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/postgres/stores.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/protocols.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/sqlite/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/sqlite/stores.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/adapters/sqlite/vector_search.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/activity_tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/journal_repair.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/client.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/connection_tuning.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/activity_events_content_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/actor_role_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/affinity_pair_labels_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/attention_triage_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/attention_triage_v2.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/backup.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/backup_custody.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/calendar_events_scheduling_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/canonical_address_book_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/community_names_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/complexity_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/conflict_provenance_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/conversation_context_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/derivation_factory_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/derivation_ledger_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/derivation_provenance_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/derived_row_identity_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/documents_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/enrichment_record_progress_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/enrichment_spec_version_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_affinity_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_blackhole_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_context_vectors_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_context_vectors_v2.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_edges_validity_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_mentions_authored_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_review_candidate_bar_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_review_dedup_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/entity_review_provenance_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/episodes_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/fact_dimension_by_entity_type_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/journal_origin_dimension_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/mention_table_stamp_backfill_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/message_emotions_role_backfill_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/message_emotions_role_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/net_subject_policy_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/pack_registry_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/pipeline_jobs_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/query_artifacts_duration_ms_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/registry.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/registry_checksums.json +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/remediation_person_model.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/retire_url_classification_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/scope_source_generation.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/signal_dimension_backfill_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/signal_objects.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/signal_objects_period_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/signal_summaries_drop_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/vector_storage_v4.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_clusters_v2.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_entities_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_entity_review_v2.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_facts_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_lifecycle_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_stats_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/migrations/wiki_timeline_v1.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/paths.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/postgres.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/schema.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/schema_probe.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/storage_breakdown.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/db/write_gate.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/derived_row_identity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/oplog/decision.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/person/identity_resolver.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/projections/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/raw/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/raw/file_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/security/encryption.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/signal_identity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/source_settings.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/storage/user_identity.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sync/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sync/client.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/sync_handlers.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/testing/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/testing/lifespan.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/uds.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/uma_filters.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/uma_resource_id.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/uma_rpt.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/upgrades/__init__.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/upgrades/runner.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/utils/base_object.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos/websocket_client.py +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos_node.egg-info/SOURCES.txt +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos_node.egg-info/requires.txt +0 -0
- {topos_node-1.3.40 → topos_node-1.3.41}/topos_node.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "topos-node"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.41"
|
|
8
8
|
description = "Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -44,8 +44,12 @@ def _counts() -> Dict[str, Any]:
|
|
|
44
44
|
except Exception: # noqa: BLE001
|
|
45
45
|
out[key] = None
|
|
46
46
|
try:
|
|
47
|
+
# The column is `last_run_at` -- what _mark_materialized writes. This read
|
|
48
|
+
# `materialized_at`, which does not exist, and the per-field try/except
|
|
49
|
+
# turned that into a permanent null rather than an error: shipped in
|
|
50
|
+
# 1.3.40 and noticed only because the live reply carried the null.
|
|
47
51
|
row = conn.execute(
|
|
48
|
-
"SELECT MAX(
|
|
52
|
+
"SELECT MAX(last_run_at) FROM graph_materialization_state"
|
|
49
53
|
).fetchone()
|
|
50
54
|
out["materialized_at"] = row[0] if row else None
|
|
51
55
|
except Exception: # noqa: BLE001
|
|
@@ -401,7 +401,15 @@ class EvidenceCache:
|
|
|
401
401
|
for row in conn.execute(
|
|
402
402
|
f"""
|
|
403
403
|
SELECT src_entity_id, dst_entity_id, edge_type, weight, evidence_count,
|
|
404
|
-
|
|
404
|
+
-- last_event_at ONLY. valid_from is when the node started
|
|
405
|
+
-- believing the relation (a recompute's clock for part_of
|
|
406
|
+
-- and other structural edges) and created_at is the row's
|
|
407
|
+
-- own birth; neither is an event. The fallback made an
|
|
408
|
+
-- undated edge report activity at rebuild time, which is
|
|
409
|
+
-- the defect fixed for the graph window in edges.py.
|
|
410
|
+
-- EvidenceCache.add tolerates None: weight still counts,
|
|
411
|
+
-- no date is invented.
|
|
412
|
+
last_event_at AS event_at
|
|
405
413
|
FROM entity_edges
|
|
406
414
|
WHERE valid_to IS NULL
|
|
407
415
|
AND LOWER(TRIM(edge_type)) IN ({placeholders})
|
|
@@ -562,11 +562,21 @@ def graph_snapshot(
|
|
|
562
562
|
clause = ""
|
|
563
563
|
else:
|
|
564
564
|
clause = " AND valid_to IS NULL"
|
|
565
|
+
# A TIME window asks "did anything happen between these dates". Only
|
|
566
|
+
# last_event_at answers that. valid_from is when the node started BELIEVING
|
|
567
|
+
# the relation -- for a structural edge written by a recompute (semantic
|
|
568
|
+
# affinity, part_of) that is the recompute's clock, and it carries no event
|
|
569
|
+
# at all. The old COALESCE fallback read that clock as activity, so every
|
|
570
|
+
# entity touched by a rebuild appeared in "the last 11 days" no matter when
|
|
571
|
+
# it was last mentioned: 69 of 4,602 dormant entities on the reference node,
|
|
572
|
+
# 60 of them through exactly these undated edges. An undated edge is no
|
|
573
|
+
# evidence of activity in any window; it stays in the unwindowed views,
|
|
574
|
+
# where valid_from remains the right recency key for ORDER BY.
|
|
565
575
|
if after:
|
|
566
|
-
clause += " AND
|
|
576
|
+
clause += " AND last_event_at IS NOT NULL AND last_event_at >= ?"
|
|
567
577
|
where_params.append(after)
|
|
568
578
|
if before:
|
|
569
|
-
clause += " AND
|
|
579
|
+
clause += " AND last_event_at IS NOT NULL AND last_event_at <= ?"
|
|
570
580
|
where_params.append(before)
|
|
571
581
|
|
|
572
582
|
where_sql = (
|
|
@@ -28,6 +28,7 @@ import asyncio
|
|
|
28
28
|
import logging
|
|
29
29
|
import os
|
|
30
30
|
import threading
|
|
31
|
+
from typing import Any, Dict
|
|
31
32
|
from datetime import datetime, timezone
|
|
32
33
|
from typing import Any, Callable, Dict, Optional
|
|
33
34
|
|
|
@@ -253,6 +254,60 @@ def gc_status() -> Dict[str, Any]:
|
|
|
253
254
|
return {"enabled": _gc_enabled(), "pending": _GC_TIMER is not None, **_GC_LAST}
|
|
254
255
|
|
|
255
256
|
|
|
257
|
+
def refresh_now_if_dirty() -> Dict[str, Any]:
|
|
258
|
+
"""Rebuild the graph inline, right now, if it is dirty and nothing is deriving.
|
|
259
|
+
|
|
260
|
+
Written for one caller: the post-canonical pipeline, at the point between
|
|
261
|
+
canonical enrichment and signal derivation. The debounced mark cannot do
|
|
262
|
+
this job there -- its timer fires ~90s later, by which time signal
|
|
263
|
+
derivation has raised the in-flight counter and _fire re-arms the timer
|
|
264
|
+
instead of rebuilding (DEBUG-logged). It keeps re-arming until derivation
|
|
265
|
+
ends, so the mid-import refresh collapses into the end-of-pipeline one. On
|
|
266
|
+
a file import that phase runs for hours, so "the graph fills before the
|
|
267
|
+
long phase" never happened. Measured on a 20-stage import: zero mid-import
|
|
268
|
+
rebuilds.
|
|
269
|
+
|
|
270
|
+
Costs a rebuild (~7-9 minutes on a 17k-edge node) inside the import, which
|
|
271
|
+
is the point. Skipped when the graph is not dirty, so a re-import that
|
|
272
|
+
changed nothing pays nothing.
|
|
273
|
+
"""
|
|
274
|
+
from ...core.state import get_db_connection
|
|
275
|
+
from ...enrichment.pipeline_activity import is_derivation_in_flight
|
|
276
|
+
|
|
277
|
+
if not _enabled():
|
|
278
|
+
return {"skipped": "disabled"}
|
|
279
|
+
if is_derivation_in_flight():
|
|
280
|
+
return {"skipped": "derivation in flight"}
|
|
281
|
+
conn = get_db_connection()
|
|
282
|
+
if conn is None:
|
|
283
|
+
return {"skipped": "no database"}
|
|
284
|
+
try:
|
|
285
|
+
row = conn.execute(
|
|
286
|
+
"SELECT dirty_generation, materialized_generation FROM graph_materialization_state WHERE id=1"
|
|
287
|
+
).fetchone()
|
|
288
|
+
except Exception as exc: # noqa: BLE001
|
|
289
|
+
return {"skipped": f"state unreadable: {exc}"}
|
|
290
|
+
if not row or int(row[0]) <= int(row[1]):
|
|
291
|
+
return {"skipped": "not dirty"}
|
|
292
|
+
logger.info("graph refresh: inline, before signal derivation")
|
|
293
|
+
try:
|
|
294
|
+
_refresher._rebuild_fn()
|
|
295
|
+
return {"ran": True}
|
|
296
|
+
except WriteGateDeferred as exc:
|
|
297
|
+
_refresher.mark()
|
|
298
|
+
return {"skipped": f"deferred: {exc}"}
|
|
299
|
+
finally:
|
|
300
|
+
# This runs on an asyncio.to_thread worker. Pooled threads are reused;
|
|
301
|
+
# the rebuild route closes its thread-local connection for the same
|
|
302
|
+
# reason, or every call leaks one.
|
|
303
|
+
try:
|
|
304
|
+
from ...core.state import close_thread_db_connection
|
|
305
|
+
|
|
306
|
+
close_thread_db_connection()
|
|
307
|
+
except Exception: # noqa: BLE001 — cleanup must not mask the result
|
|
308
|
+
pass
|
|
309
|
+
|
|
310
|
+
|
|
256
311
|
def mark_graph_dirty() -> None:
|
|
257
312
|
"""Enrichment completed for a source — schedule a debounced graph rebuild."""
|
|
258
313
|
try:
|
|
@@ -893,30 +893,6 @@ async def run_post_canonical_pipeline(
|
|
|
893
893
|
logger.error("[PIPELINE:ENRICHMENT] post-canonical failed: %s", exc, exc_info=True)
|
|
894
894
|
outcome["canonical_enrichment"] = {"errors": [str(exc)]}
|
|
895
895
|
|
|
896
|
-
# Materialise the graph HERE, not only at the end of the pipeline.
|
|
897
|
-
#
|
|
898
|
-
# The entity data lands early -- the entities job writes entities,
|
|
899
|
-
# message_entities and entity_mentions batch by batch -- but the graph
|
|
900
|
-
# a person actually looks at is derived by rebuild_entity_graph, and
|
|
901
|
-
# the only mark was after signal derivation. On a file import that is
|
|
902
|
-
# 13 more stages and hours of model work, so everything landed in the
|
|
903
|
-
# database with no visible change to the graph until the very end.
|
|
904
|
-
#
|
|
905
|
-
# One mark here, one at the end: two rebuilds per import. Deliberately
|
|
906
|
-
# NOT one per job. graph_refresh is single-flight and a mark landing
|
|
907
|
-
# mid-rebuild schedules exactly one follow-up, so marking per job would
|
|
908
|
-
# chain rebuilds back to back for the whole import and take CPU from
|
|
909
|
-
# the model work that is already the slow part.
|
|
910
|
-
try:
|
|
911
|
-
from ..features.entities.graph_refresh import mark_graph_dirty
|
|
912
|
-
|
|
913
|
-
mark_graph_dirty()
|
|
914
|
-
logger.info(
|
|
915
|
-
"[PIPELINE:ENRICHMENT] graph marked dirty after canonical enrichment "
|
|
916
|
-
"so the graph fills before signal derivation runs"
|
|
917
|
-
)
|
|
918
|
-
except Exception as exc: # noqa: BLE001 — refresh must never break ingest
|
|
919
|
-
logger.debug("mid-import graph refresh mark skipped: %s", exc)
|
|
920
896
|
elif canonical_jobs and enrichment_trigger == "manual":
|
|
921
897
|
logger.debug(
|
|
922
898
|
"[PIPELINE:ENRICHMENT] Skipping canonical enrichment (manual trigger): source_id=%s records=%d",
|
|
@@ -930,6 +906,32 @@ async def run_post_canonical_pipeline(
|
|
|
930
906
|
signal_gate_open = (
|
|
931
907
|
enrichment_trigger == "automatic" or force_signal or job_names is not None
|
|
932
908
|
)
|
|
909
|
+
# Fill the graph HERE, before the long phase -- and actually do it.
|
|
910
|
+
#
|
|
911
|
+
# The entity data lands early; the graph a person looks at is derived by
|
|
912
|
+
# rebuild_entity_graph. The first version of this marked the graph dirty
|
|
913
|
+
# after canonical enrichment and left the rebuild to the debounced
|
|
914
|
+
# refresher. Two things defeated it, both measured on a live 20-stage
|
|
915
|
+
# import: the mark sat inside the enrichment guard, so an import with
|
|
916
|
+
# nothing left to enrich never marked at all; and the refresher's timer
|
|
917
|
+
# fires ~90s later, by which time signal derivation has raised its
|
|
918
|
+
# in-flight counter and the refresh re-arms itself until derivation ends
|
|
919
|
+
# -- collapsing into the end-of-pipeline rebuild. Zero mid-import
|
|
920
|
+
# rebuilds, every time.
|
|
921
|
+
#
|
|
922
|
+
# So: mark, then rebuild inline while nothing is deriving. ~7-9 minutes on
|
|
923
|
+
# a 17k-edge node, inside the import, which is the point. Skipped when the
|
|
924
|
+
# graph is not dirty, so a re-import that changed nothing pays nothing.
|
|
925
|
+
if canonical_records:
|
|
926
|
+
try:
|
|
927
|
+
from ..features.entities.graph_refresh import mark_graph_dirty, refresh_now_if_dirty
|
|
928
|
+
|
|
929
|
+
mark_graph_dirty()
|
|
930
|
+
outcome["graph_fill"] = await asyncio.to_thread(refresh_now_if_dirty)
|
|
931
|
+
logger.info("[PIPELINE:GRAPH] mid-import graph fill: %s", outcome["graph_fill"])
|
|
932
|
+
except Exception as exc: # noqa: BLE001 -- the graph must never break ingest
|
|
933
|
+
logger.warning("mid-import graph fill skipped: %s", exc)
|
|
934
|
+
|
|
933
935
|
if run_signal and signal_jobs and not signal_gate_open:
|
|
934
936
|
logger.debug(
|
|
935
937
|
"[PIPELINE:SIGNAL_DERIVE] Skipping signal derivation (manual trigger): source_id=%s records=%d",
|
|
@@ -751,6 +751,12 @@
|
|
|
751
751
|
"Retrieval, progress reporting, the sharded export reader and the graph-timing change are code-only and apply on restart; none rewrites stored rows."
|
|
752
752
|
]
|
|
753
753
|
},
|
|
754
|
+
{
|
|
755
|
+
"version": "1.3.41",
|
|
756
|
+
"summary": "Release 1.3.41.",
|
|
757
|
+
"steps": [],
|
|
758
|
+
"notes": []
|
|
759
|
+
},
|
|
754
760
|
{
|
|
755
761
|
"version": "unreleased",
|
|
756
762
|
"summary": "Staging entry for in-flight PRs. cut_release.py stamps this with the next version at release cut. Never executed by steps_between.",
|
|
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
|
{topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/browser_activity_mapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/github_activity_mapper.py
RENAMED
|
File without changes
|
{topos_node-1.3.40 → topos_node-1.3.41}/topos/canonicalization/mappers/google_calendar_mapper.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
|