typedef-data-intelligence 0.26.2__tar.gz → 0.27.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/CHANGELOG.md +20 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/PKG-INFO +2 -1
- typedef_data_intelligence-0.27.0/docs/reference/SEMANTIC_DIFF_HARNESS.md +130 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/pyproject.toml +3 -1
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/app.py +45 -29
- typedef_data_intelligence-0.27.0/src/lineage/api/controlplane_identity.py +77 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_context.py +2 -1
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_quickstart.py +278 -31
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_setup.py +370 -317
- typedef_data_intelligence-0.27.0/src/lineage/api/desktop_sync.py +2476 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_wizard_sync.py +2 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_workspaces.py +1235 -63
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_worktree.py +907 -314
- typedef_data_intelligence-0.27.0/src/lineage/api/posthog_analytics.py +351 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/pydantic.py +2 -6
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/ephemeral_lineage_report.py +3 -4
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/runner.py +7 -1
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/__init__.py +1 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/cli.py +186 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/db_names.py +82 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/dbt_compile.py +87 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/diff_runner.py +63 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/fixtures/column_rename_downstream/fixture.yaml +18 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/fixtures/column_rename_downstream/mutation.diff +469 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/fixtures_loader.py +107 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/ingest.py +51 -0
- typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/source_prep.py +88 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/surreal/desktop_mcp.py +191 -64
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/unified_cli.py +40 -2
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/mcp/runner.py +14 -10
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/typedef_cli.py +2 -2
- typedef_data_intelligence-0.27.0/src/lineage/utils/dbt_profile.py +281 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_databricks_setup.py +165 -17
- typedef_data_intelligence-0.27.0/tests/api/test_desktop_posthog.py +1289 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_quickstart.py +19 -8
- typedef_data_intelligence-0.27.0/tests/api/test_desktop_setup_env_vars.py +58 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_sync.py +80 -38
- typedef_data_intelligence-0.27.0/tests/api/test_desktop_sync_render_profile.py +347 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_telemetry.py +59 -2
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_r3_r10.py +35 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_summary.py +5 -48
- typedef_data_intelligence-0.27.0/tests/api/test_desktop_workspaces_wizard.py +176 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_worktree.py +12 -18
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_worktree_clone.py +13 -36
- typedef_data_intelligence-0.27.0/tests/api/test_workspace_clone_settings.py +286 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_worktree_registry_workspaces_shape.py +7 -1
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/lineage/test_search_enum_coverage.py +1 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/conftest.py +0 -24
- typedef_data_intelligence-0.27.0/tests/docs/test_desktop_posthog_event_docs.py +213 -0
- typedef_data_intelligence-0.27.0/tests/integration/test_semantic_diff_harness.py +70 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/mcp/test_desktop_mcp_retry.py +114 -48
- typedef_data_intelligence-0.27.0/tests/mcp/test_list_projects.py +216 -0
- typedef_data_intelligence-0.27.0/tests/unit/devtools/test_semdiff_harness_units.py +418 -0
- typedef_data_intelligence-0.27.0/tests/unit/utils/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_dbt_docs_generate.py +29 -0
- typedef_data_intelligence-0.27.0/tests/unit/utils/test_dbt_profile.py +301 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_run_dbt_command.py +56 -0
- typedef_data_intelligence-0.26.2/src/lineage/api/desktop_projects.py +0 -1317
- typedef_data_intelligence-0.26.2/src/lineage/api/desktop_sync.py +0 -1553
- typedef_data_intelligence-0.26.2/tests/api/test_desktop_projects.py +0 -1785
- typedef_data_intelligence-0.26.2/tests/api/test_desktop_projects_env_vars.py +0 -7
- typedef_data_intelligence-0.26.2/tests/api/test_desktop_workspaces_wizard.py +0 -76
- typedef_data_intelligence-0.26.2/tests/api/test_workspace_schema_write_targets.py +0 -363
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.dockerignore +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.env.example +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.gitignore +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.justfile_help.txt +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/Dockerfile +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/Dockerfile.dev +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/Justfile +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/MODEL_USAGE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/README.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/README.pypi.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.api.yml +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.cli.yml +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.desktop.yml +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.ingest.unified.yml +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.ingest.yml +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docker-entrypoint.dev.sh +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/LINEAR_TICKETING_BACKEND.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/BUSINESS_CONCEPT_INDEX.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/CLUSTERING_ALGORITHM_DECISION.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/GENERIC_REPORT_SCHEMA.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/HYBRID_ANALYSIS_ARCHITECTURE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/PHASE2_IR_STITCHING.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/PIPELINE_PRIMITIVES_USECASES.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/SALESFORCE_REPORT_IR.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/SEMANTIC_JOIN_RESOLUTION.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/SEMANTIC_SCHEMA_DESIGN.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/AGENT_DESIGN_NOTES.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/COLUMN_PROFILING.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/COLUMN_PROFILING_IMPLEMENTATION.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/EXTRACTION_DETECTION.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/PERFORMANCE_AND_QUALITY_SPECIALISTS.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/STREAMING_SUBAGENT_ARCHITECTURE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/examples/memory_usage_examples.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/examples/pydantic_tool_customization_example.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/ADDING_LINEAGE_BACKEND.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/AGENT_USER_GUIDE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/CLI_USAGE_EXAMPLES.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/GETTING_STARTED.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/MEMORY_SYSTEM.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/MIGRATION_THREE_SQL.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/SALESFORCE_AUTH.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/SCOPE_LEVEL_LINEAGE_GUIDE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/SEMANTIC_DIMENSIONS_GUIDE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/TYPE_ENUMS.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/pytest.ini +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/create_salesforce_reports.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/data_generation/utils.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/databricks-smoke.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/delete_salesforce_reports.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/populate_salesforce_schema.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/replay_events.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/reset_demo_git_workspace.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/reset_demo_linear.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/snowflake_server.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-engine-bench.sh +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-fts-b2-corpus.sh +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-fts-bench.sh +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-fts-quality.sh +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/tui/pilotty-smoke.sh +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/snowflake-mcp-config.yaml +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/auth_context.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/collector.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/concept_cards.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_agents.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_runtime.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/graph_availability.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/ontology.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/semantic_runtime.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/cli.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/clustering_metrics.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/drop_snowflake_tables.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/eval_clustering.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/list_ephemeral_models.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/refingerprint_cache.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/regen_semantic_goldens.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/reset_git_workspace.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/reset_linear_workspace.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/reset_project.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/run_dbt_workflow.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/semantic_goldens.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_bench.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_cells.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_corpus.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_corpus_dump.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_coverage.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_coverage_report.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_oracle.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_quality.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_quality_bench.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/log_parse.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/report.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/surreal/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/mcp/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/mcp/server.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/templates/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/templates/typedef_config.yaml.j2 +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/AGENTS.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/CLAUDE.md +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/app.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/backend.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/perf.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/activity.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/artifacts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/chat.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/daemon.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/help.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/key_inspector.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/placeholders.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/status.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/tickets.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/styles.tcss +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/theme.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/artifact_types.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/builders.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/cell_renderers.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/formatters.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/helpers.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/viewer.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/image.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/base.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/helpers.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/backend.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/config.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/cube.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/dbt_source.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/integration_base.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/linear.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/looker.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/project.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/salesforce.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/snowflake.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/validation.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/project_selector.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/styles.tcss +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/sync_progress.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/databricks.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/databricks_oauth.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/dbt.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/drop_snowflake_objects.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/env.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/git.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/gitignore.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/logging.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/run_snowflake_query.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/snowflake.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_concept_cards.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_agents_runtime.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_clerk_auth.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_context_reader_cache.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_databricks_oauth.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_diagnostics.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_runtime.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_salesforce.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_save_env_credentials.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_search.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_setup.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_setup_clone.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_delete.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_integrations.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_preview_name.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_projects_and_repos.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_graph_availability_any_sentinel.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_health_readiness.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_surreal_graph_availability.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_validate_project_collisions.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_wizard_create_project_integration_persistence.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/lineage/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/lineage/test_surreal_search.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_fts_cells.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_fts_coverage.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_fts_quality.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_log_parse.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_report.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/integration/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/mcp/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/mcp/test_server.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_dbt_venv_helpers.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_git_utils.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_gitignore_utils.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_helpers_semantic.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_model_tier_validation.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_sf_login_cli.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_template_yaml_escaping.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_typedef_cli_import_budget.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_unified_cli_airflow.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_activity_screen.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_chat_mode_switching.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_chat_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_copy_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_daemon_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_exit_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_startup_flow.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_tickets_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_artifact_viewer_icons.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_artifacts_screen.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_backend_manager_lifecycle.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_activity_modal_guard.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_agent_header.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_artifact_viewer_mount_guard.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_screen_input_behavior.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_slash_commands.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_daemon_screen_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_daemon_screen_styling.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_diagnostics_widget.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_help_screen_shortcuts.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_key_inspector_screen.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_shortcuts_screen.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_status_bar_hints.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_status_screen.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_tickets_focus_styles.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_tickets_screen_styling.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_tui_perf_logging.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_wizard_async_auto_advance.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_wizard_style_parity.py +0 -0
- {typedef_data_intelligence-0.26.2/tests/unit/formula → typedef_data_intelligence-0.27.0/tests/unit/devtools}/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2/tests/unit/utils → typedef_data_intelligence-0.27.0/tests/unit/formula}/__init__.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_databricks_utils.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_logging.py +0 -0
- {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_snowflake_utils.py +0 -0
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.27.0](https://github.com/typedef-ai/typedef/compare/typedef-data-intelligence-v0.26.2...typedef-data-intelligence-v0.27.0) (2026-06-02)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Miscellaneous Chores
|
|
7
|
+
|
|
8
|
+
* **lineage:** semantic graph diff realistic mutation harness (TD-3110) ([#806](https://github.com/typedef-ai/typedef/issues/806)) ([217509f](https://github.com/typedef-ai/typedef/commit/217509f2190728bcb6a8fae8731d61612823c3d0))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* add posthog analytics ([#736](https://github.com/typedef-ai/typedef/issues/736)) ([63c1d50](https://github.com/typedef-ai/typedef/commit/63c1d506dc6858d4ee49c59b8351eff8c31ba45f))
|
|
14
|
+
* **td-2962:** multi-project configuration (settings UI + wizard rewrite) ([#770](https://github.com/typedef-ai/typedef/issues/770)) ([dc900d3](https://github.com/typedef-ai/typedef/commit/dc900d38e2bd7411587caf6408ab69b77045e6cf))
|
|
15
|
+
* **td-3185:** per-project dbt-package systems + nested L2 rendering ([#799](https://github.com/typedef-ai/typedef/issues/799)) ([dd81bdc](https://github.com/typedef-ai/typedef/commit/dd81bdc8fd316e2fce5a2fca239987cf3d75193e))
|
|
16
|
+
* **typedef-desktop multi-project:** selective graph ingest (td-2802) ([#721](https://github.com/typedef-ai/typedef/issues/721)) ([e150054](https://github.com/typedef-ai/typedef/commit/e150054bedf5ab900e7e769ebbcd467277ba4978))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Code Refactoring
|
|
20
|
+
|
|
21
|
+
* **remove-legacy:** PR-6 — remove legacy projects synthesis (TD-2959 milestone 1) ([#796](https://github.com/typedef-ai/typedef/issues/796)) ([4445f9a](https://github.com/typedef-ai/typedef/commit/4445f9ae33125bc1ea1f26b5440fce44feb9bd7e))
|
|
22
|
+
|
|
3
23
|
## [0.26.2](https://github.com/typedef-ai/typedef/compare/typedef-data-intelligence-v0.26.1...typedef-data-intelligence-v0.26.2) (2026-05-30)
|
|
4
24
|
|
|
5
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: typedef-data-intelligence
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.0
|
|
4
4
|
Summary: Unified lineage management and AI-powered analytics platform for dbt projects
|
|
5
5
|
Project-URL: Homepage, https://typedef.ai
|
|
6
6
|
Project-URL: Repository, https://github.com/typedef-ai/data-intelligence
|
|
@@ -40,6 +40,7 @@ Requires-Dist: networkx>=3.6
|
|
|
40
40
|
Requires-Dist: openlineage-dbt>=1.39.0
|
|
41
41
|
Requires-Dist: openlineage-python
|
|
42
42
|
Requires-Dist: plotly>=6.3.1
|
|
43
|
+
Requires-Dist: posthog>=7.9.7
|
|
43
44
|
Requires-Dist: pydantic-ai-skills>=0.5.1
|
|
44
45
|
Requires-Dist: pydantic-ai-todo>=0.1.10
|
|
45
46
|
Requires-Dist: pydantic-ai<1.82.0,>=1.66.0
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Semantic Graph Diff Mutation Harness (TD-3110)
|
|
2
|
+
|
|
3
|
+
The harness applies a scripted, realistic dbt source mutation, rebuilds the
|
|
4
|
+
graph through the normal **structural** sync path into two throwaway SurrealDB
|
|
5
|
+
databases, runs the landed semantic-diff engine, and writes deterministic
|
|
6
|
+
JSON + Markdown diff artifacts. Its output is grounding evidence for
|
|
7
|
+
[TD-3193](https://linear.app/typedef-ai/issue/TD-3193) (compaction +
|
|
8
|
+
blast-radius summaries): the raw, uncompacted noise profile of a real refactor.
|
|
9
|
+
|
|
10
|
+
It consumes the public diff API
|
|
11
|
+
(`core.backends.unified_graph.semantic_diff`) — it does **not** reimplement
|
|
12
|
+
snapshot or diff logic.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- **`TYPEDEF_HOME=~/.typedef-desktop`** must be exported. Without it,
|
|
17
|
+
`repos_dir()` and the dbt-adapter venv resolve to the empty `~/.typedef`.
|
|
18
|
+
(The `just` recipe and the CLI both default it.)
|
|
19
|
+
- The **SurrealDB sidecar** must be running at `ws://127.0.0.1:3567`
|
|
20
|
+
(namespace `lineage`, auth `root`/`root`). The embedded `surrealkv://`
|
|
21
|
+
fallback opens an empty store and must not be used.
|
|
22
|
+
- **Git access** to the fixture's `git_url` — either already pooled locally at
|
|
23
|
+
`repos_dir() / hash_git_url(git_url)` or cloneable fresh.
|
|
24
|
+
- **Snowflake credentials** for the `dbt compile` step only. Structural ingest
|
|
25
|
+
itself is offline (no profiling, no warehouse sampling, no LLM). The default
|
|
26
|
+
dbt profile is resolved from the project key
|
|
27
|
+
(`~/.typedef-desktop/profiles/<project>/context/<project>/`); override with
|
|
28
|
+
`--profiles-dir`. The harness reads the rendered `profiles.yml`'s top-level
|
|
29
|
+
key and passes it via `--profile` (the desktop re-renders that key, so it is
|
|
30
|
+
not assumed).
|
|
31
|
+
|
|
32
|
+
## Run
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
just semantic-diff-harness column_rename_downstream
|
|
36
|
+
# or, with options:
|
|
37
|
+
TYPEDEF_HOME=~/.typedef-desktop uv run lineage-semantic-diff-harness \
|
|
38
|
+
--fixture column_rename_downstream
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Useful flags: `--project` / `--profiles-dir` (creds lookup), `--gold-db` /
|
|
42
|
+
`--candidate-db` (override the throwaway DB names), `--out-dir`, `--reuse-gold`
|
|
43
|
+
(skip rebuilding gold when its DB already has data), `--save-reference` (copy
|
|
44
|
+
the reports into the fixture dir as a checked-in golden), `--keep-work` (keep
|
|
45
|
+
the temp gold/candidate checkouts for inspection; by default they are removed
|
|
46
|
+
on exit so repeated runs don't leak `$TMPDIR`).
|
|
47
|
+
|
|
48
|
+
The derived throwaway DB names embed the fixture's short `base_commit` hash
|
|
49
|
+
(`semdiff_<case>_<base8>_{gold,cand}`), so bumping a fixture's `base_commit`
|
|
50
|
+
lands in a fresh gold DB — `--reuse-gold` never silently reuses a graph built
|
|
51
|
+
from the old base.
|
|
52
|
+
|
|
53
|
+
**Exit codes** (the harness is usable as a verification gate):
|
|
54
|
+
|
|
55
|
+
- `0` — every `expected_change_kind` was observed.
|
|
56
|
+
- `2` — verification mismatch (an expected change kind was not produced) or an
|
|
57
|
+
unknown `--fixture` name. The mismatch is also logged as a warning; available
|
|
58
|
+
fixtures are listed on an unknown name and in `--help`.
|
|
59
|
+
|
|
60
|
+
At mattermost scale a full run (build gold + candidate, both via
|
|
61
|
+
`dbt deps`+`compile`, then structural ingest, then diff) is **~6–7 minutes** —
|
|
62
|
+
the two Snowflake compiles dominate.
|
|
63
|
+
|
|
64
|
+
## Artifacts
|
|
65
|
+
|
|
66
|
+
Written to `artifacts/semantic-diff/<fixture>/` (gitignored):
|
|
67
|
+
|
|
68
|
+
- `report.json` — the schema-v1 `DiffResult` serialization (output of record)
|
|
69
|
+
- `report.md` — human-readable report
|
|
70
|
+
- `raw_facts.json` — the raw fact-delta appendix (the noise profile for TD-3193)
|
|
71
|
+
|
|
72
|
+
## Determinism
|
|
73
|
+
|
|
74
|
+
The diff is deterministic for unchanged inputs at the **structural** level —
|
|
75
|
+
graph nodes, edges, and closures are byte-stable. This relies on the
|
|
76
|
+
order-independent `DbtProjector` (closure-root resolution and volatile-field
|
|
77
|
+
stripping, including the absolute per-checkout `compiled_path`) and
|
|
78
|
+
`include_generation_time=False`.
|
|
79
|
+
|
|
80
|
+
**Known residual:** a small set (~10) of warehouse-querying union models
|
|
81
|
+
(`base_*__tracks`) and `dbt_project_evaluator` models have **non-deterministic
|
|
82
|
+
`compiled_sql`** across independent `dbt compile` invocations — their
|
|
83
|
+
rudderstack union macros (`get_event_relations`) query
|
|
84
|
+
`information_schema.tables` with no `ORDER BY`, so the UNION branch set/order
|
|
85
|
+
varies per compile. Their `canonical_sql`/`fingerprint` differ only because the
|
|
86
|
+
compiled-SQL input does (the unified-graph canonicalization is itself
|
|
87
|
+
deterministic — verified). This is **upstream `dbt compile` non-determinism in
|
|
88
|
+
the dbt project**, not a harness, ingest, or diff-projector issue (~29 facts on
|
|
89
|
+
the mattermost fixture). Tracked separately (fix: add `ORDER BY` to the
|
|
90
|
+
project's `get_event_relations` macro). Structural facts are unaffected.
|
|
91
|
+
|
|
92
|
+
## Add a new mutation fixture
|
|
93
|
+
|
|
94
|
+
A fixture is `fixtures/<case>/` containing `mutation.diff` (a git patch) and
|
|
95
|
+
`fixture.yaml` (portable identifiers only):
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
name: <case>
|
|
99
|
+
description: <what the mutation does>
|
|
100
|
+
source:
|
|
101
|
+
git_url: git@github.com:org/repo # SSH form, no .git suffix
|
|
102
|
+
subproject: path/to/dbt_project # dbt project dir within the repo
|
|
103
|
+
base_commit: <full sha> # pinned
|
|
104
|
+
project: <typedef project key> # creds/profile lookup only
|
|
105
|
+
expected_change_kinds: [RemovedColumn, AddedColumn, ...]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
To author the patch:
|
|
109
|
+
|
|
110
|
+
1. `git worktree add /tmp/fx <base_commit>` from the pooled repo (or clone it).
|
|
111
|
+
2. Make a realistic, **consistent** source change (rename a column at its
|
|
112
|
+
definition **and** every reference, including `schema.yml`; the schema.yml
|
|
113
|
+
`columns:` entries feed the graph, so a SQL-only rename leaves a phantom
|
|
114
|
+
node). The change must keep the project compiling.
|
|
115
|
+
3. `git diff > fixtures/<case>/mutation.diff` (from the repo root, so paths are
|
|
116
|
+
repo-relative for `git apply`).
|
|
117
|
+
4. Write `fixtures/<case>/fixture.yaml` with portable identifiers only — never
|
|
118
|
+
a machine-local path or repo-id (the harness derives the local checkout via
|
|
119
|
+
`hash_git_url` or a fresh clone).
|
|
120
|
+
5. `uv run lineage-semantic-diff-harness --fixture <case>` and inspect
|
|
121
|
+
`report.md`.
|
|
122
|
+
|
|
123
|
+
Because `dbt compile` does not validate column existence, the **harness run
|
|
124
|
+
itself** is the verification: a clean rename shows the cascade (column
|
|
125
|
+
add/remove, lineage-edge churn, fingerprint changes) without orphan-lineage
|
|
126
|
+
artifacts.
|
|
127
|
+
|
|
128
|
+
The typedef project key affects only credential/profile lookup and is
|
|
129
|
+
overridable; it has **no bearing on the diff result** (gold and candidate share
|
|
130
|
+
the same dbt project name, hence the same `system_canonical_id`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "typedef-data-intelligence"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.27.0"
|
|
4
4
|
description = "Unified lineage management and AI-powered analytics platform for dbt projects"
|
|
5
5
|
readme = "README.pypi.md"
|
|
6
6
|
license = "LicenseRef-Proprietary"
|
|
@@ -48,6 +48,7 @@ dependencies = [
|
|
|
48
48
|
"dbt-snowflake>=1.7.0",
|
|
49
49
|
"openlineage-dbt>=1.39.0",
|
|
50
50
|
"openlineage-python",
|
|
51
|
+
"posthog>=7.9.7",
|
|
51
52
|
"textual>=6.6.0",
|
|
52
53
|
"pydantic-deep>=0.2.17",
|
|
53
54
|
"antlr4-python3-runtime>=4.13.0",
|
|
@@ -105,6 +106,7 @@ lineage-list-ephemerals = "lineage.devtools.list_ephemeral_models:main"
|
|
|
105
106
|
lineage-mcp = "lineage.mcp.runner:main"
|
|
106
107
|
lineage-unified-build = "lineage.devtools.unified_graph.unified_cli:main"
|
|
107
108
|
lineage-desktop-mcp = "lineage.devtools.unified_graph.surreal.desktop_mcp:main"
|
|
109
|
+
lineage-semantic-diff-harness = "lineage.devtools.unified_graph.semantic_diff.cli:main"
|
|
108
110
|
|
|
109
111
|
[build-system]
|
|
110
112
|
requires = ["hatchling"]
|
{typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/app.py
RENAMED
|
@@ -266,8 +266,25 @@ async def lifespan(app: FastAPI):
|
|
|
266
266
|
|
|
267
267
|
# Run TD-2959 config migration before anything else reads UnifiedConfig.
|
|
268
268
|
# Idempotent: marker file at $TYPEDEF_HOME/migrations/td-2959.json
|
|
269
|
-
# short-circuits subsequent boots.
|
|
270
|
-
#
|
|
269
|
+
# short-circuits subsequent boots. This converts legacy ``main``-shape
|
|
270
|
+
# configs (top-level projects/data/default_project) into the workspaces
|
|
271
|
+
# schema in place — it is the ONLY remaining bridge for legacy configs
|
|
272
|
+
# now that the read-side synthesis was removed (PR 6 / TD-3074).
|
|
273
|
+
#
|
|
274
|
+
# DEFERRED — PR-6 / Phase 6 final cleanup (see
|
|
275
|
+
# docs/multi-project-milestone-1-design.md:115, "Group J Phase 6").
|
|
276
|
+
# That milestone scopes deletion of the *entire* legacy/migration
|
|
277
|
+
# scaffolding into PR 6: this ``run_migration`` path + ``repair_legacy_paths``
|
|
278
|
+
# + the ``core.migrations.td_2959`` module + ``apply_legacy_project_to_workspace``
|
|
279
|
+
# + the ``_drop_legacy_top_level_keys`` validator. We deliberately KEEP it
|
|
280
|
+
# here: the doc's "after PR 6 there is no migration" assumes the td-2959
|
|
281
|
+
# migration already shipped and ran in an earlier release, but this stack
|
|
282
|
+
# is unshipped — deleting the migration before it has run on installs would
|
|
283
|
+
# break legacy ``main``-shape configs on first upgrade.
|
|
284
|
+
# GATE for removal: only delete once the td-2959 migration has shipped +
|
|
285
|
+
# run in a released version (a published floor past which legacy configs
|
|
286
|
+
# are unsupported). At that point a legacy config should fail loudly at
|
|
287
|
+
# startup rather than silently boot with its projects dropped.
|
|
271
288
|
try:
|
|
272
289
|
from core.migrations.td_2959 import (
|
|
273
290
|
repair_legacy_paths,
|
|
@@ -416,7 +433,7 @@ async def lifespan(app: FastAPI):
|
|
|
416
433
|
_ucfg_for_data = getattr(app.state, "unified_config", None)
|
|
417
434
|
if _ucfg_for_data is not None:
|
|
418
435
|
try:
|
|
419
|
-
_data_cfg = _ucfg_for_data.
|
|
436
|
+
_data_cfg = _ucfg_for_data.get_workspace_data_config(
|
|
420
437
|
_ucfg_for_data.default_project
|
|
421
438
|
)
|
|
422
439
|
app.state.standalone_data_backend = create_data_backend(
|
|
@@ -451,21 +468,18 @@ async def lifespan(app: FastAPI):
|
|
|
451
468
|
logger.info("Initialized standalone reports backend: %s", _reports_dir)
|
|
452
469
|
|
|
453
470
|
# Initialize ticket storage for desktop agents (OAuth or API key).
|
|
454
|
-
# Ticket config
|
|
455
|
-
#
|
|
471
|
+
# Ticket config resolves through the typed three-tier walk
|
|
472
|
+
# (context entry → workspace → installation), no legacy projects
|
|
473
|
+
# view.
|
|
456
474
|
_ucfg_for_tickets = getattr(app.state, "unified_config", None)
|
|
457
475
|
_ticket_cfg = None
|
|
458
476
|
if _ucfg_for_tickets is not None:
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
_ucfg_for_tickets.
|
|
462
|
-
if _dp and _ucfg_for_tickets.projects
|
|
463
|
-
else None
|
|
477
|
+
_resolved_ticket = _ucfg_for_tickets.resolve_ticket(
|
|
478
|
+
workspace_name=_ucfg_for_tickets.resolve_active_workspace(),
|
|
479
|
+
project_name=_ucfg_for_tickets.default_project,
|
|
464
480
|
)
|
|
465
|
-
if
|
|
466
|
-
_ticket_cfg =
|
|
467
|
-
elif _ucfg_for_tickets.ticket.enabled:
|
|
468
|
-
_ticket_cfg = _ucfg_for_tickets.ticket
|
|
481
|
+
if _resolved_ticket is not None and _resolved_ticket.enabled:
|
|
482
|
+
_ticket_cfg = _resolved_ticket
|
|
469
483
|
|
|
470
484
|
if _ticket_cfg is not None:
|
|
471
485
|
try:
|
|
@@ -682,6 +696,13 @@ async def lifespan(app: FastAPI):
|
|
|
682
696
|
"Failed to terminate active quickstart workers", exc_info=True
|
|
683
697
|
)
|
|
684
698
|
|
|
699
|
+
try:
|
|
700
|
+
from lineage.api.posthog_analytics import shutdown_shared_posthog_client
|
|
701
|
+
|
|
702
|
+
shutdown_shared_posthog_client()
|
|
703
|
+
except Exception:
|
|
704
|
+
logger.debug("Failed to shut down PostHog analytics client", exc_info=True)
|
|
705
|
+
|
|
685
706
|
# Close standalone data backend (e.g. DuckDB file handle)
|
|
686
707
|
standalone_db = getattr(app.state, "standalone_data_backend", None)
|
|
687
708
|
if standalone_db is not None:
|
|
@@ -795,16 +816,15 @@ def _create_linear_token_manager(cfg: UnifiedConfig):
|
|
|
795
816
|
from core.backends.config import LinearTicketConfig
|
|
796
817
|
from core.backends.tickets.factory import create_linear_token_manager_from_config
|
|
797
818
|
|
|
798
|
-
#
|
|
819
|
+
# Resolve the LinearTicketConfig via the typed three-tier walk
|
|
820
|
+
# (context entry → workspace → installation), no legacy projects view.
|
|
799
821
|
linear_cfg = None
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
if linear_cfg is None and isinstance(cfg.ticket, LinearTicketConfig):
|
|
807
|
-
linear_cfg = cfg.ticket
|
|
822
|
+
resolved_ticket = cfg.resolve_ticket(
|
|
823
|
+
workspace_name=cfg.resolve_active_workspace(),
|
|
824
|
+
project_name=cfg.default_project,
|
|
825
|
+
)
|
|
826
|
+
if isinstance(resolved_ticket, LinearTicketConfig):
|
|
827
|
+
linear_cfg = resolved_ticket
|
|
808
828
|
|
|
809
829
|
if linear_cfg is None:
|
|
810
830
|
return None
|
|
@@ -904,7 +924,7 @@ def initialize_app_state() -> AppState:
|
|
|
904
924
|
# Initialize data backend from project config
|
|
905
925
|
active_project = os.getenv("TYPEDEF_ACTIVE_PROJECT") or cfg.default_project
|
|
906
926
|
try:
|
|
907
|
-
data_config = cfg.
|
|
927
|
+
data_config = cfg.get_workspace_data_config(active_project)
|
|
908
928
|
except ValueError as exc:
|
|
909
929
|
raise RuntimeError(
|
|
910
930
|
"No data backend configuration found. "
|
|
@@ -915,7 +935,7 @@ def initialize_app_state() -> AppState:
|
|
|
915
935
|
|
|
916
936
|
# Get per-project git config if active project specified
|
|
917
937
|
git_config = None
|
|
918
|
-
if active_project and cfg.
|
|
938
|
+
if active_project and cfg.has_workspace_project(active_project):
|
|
919
939
|
git_config = cfg.get_project_git_config(active_project)
|
|
920
940
|
if git_config and git_config.enabled:
|
|
921
941
|
logger.info(f"📁 Git configuration loaded for project: {active_project}")
|
|
@@ -1256,9 +1276,6 @@ if _HAS_DESKTOP_API:
|
|
|
1256
1276
|
)
|
|
1257
1277
|
from agent.api.desktop_pty import router as desktop_pty_router # noqa: E402
|
|
1258
1278
|
from lineage.api.desktop_agents import router as desktop_agents_router # noqa: E402
|
|
1259
|
-
from lineage.api.desktop_projects import (
|
|
1260
|
-
router as desktop_projects_router, # noqa: E402
|
|
1261
|
-
)
|
|
1262
1279
|
from lineage.api.desktop_quickstart import (
|
|
1263
1280
|
router as desktop_quickstart_router, # noqa: E402
|
|
1264
1281
|
)
|
|
@@ -1288,7 +1305,6 @@ if _HAS_DESKTOP_API:
|
|
|
1288
1305
|
app.include_router(desktop_worktree_router)
|
|
1289
1306
|
app.include_router(desktop_setup_router)
|
|
1290
1307
|
app.include_router(desktop_credentials_router)
|
|
1291
|
-
app.include_router(desktop_projects_router)
|
|
1292
1308
|
app.include_router(desktop_workspaces_router)
|
|
1293
1309
|
app.include_router(desktop_repos_router)
|
|
1294
1310
|
app.include_router(desktop_quickstart_router)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""Trusted controlplane identity resolution for backend analytics."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
|
|
8
|
+
import httpx
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, ValidationError
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True)
|
|
13
|
+
class ControlplaneIdentityConfig:
|
|
14
|
+
"""Auth-service validation configuration."""
|
|
15
|
+
|
|
16
|
+
auth_base_url: str
|
|
17
|
+
timeout_seconds: float = 2.0
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass(frozen=True)
|
|
21
|
+
class ControlplaneAnalyticsIdentity:
|
|
22
|
+
"""Pseudonymous analytics identity minted by the auth service."""
|
|
23
|
+
|
|
24
|
+
analytics_user_id: str
|
|
25
|
+
analytics_org_id: str
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class _ValidateTokenResponse(BaseModel):
|
|
29
|
+
model_config = ConfigDict(extra="ignore")
|
|
30
|
+
|
|
31
|
+
analytics_user_id: str | None = None
|
|
32
|
+
analytics_org_id: str | None = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def resolve_controlplane_analytics_identity(
|
|
36
|
+
*,
|
|
37
|
+
token: str | None,
|
|
38
|
+
config: ControlplaneIdentityConfig | None,
|
|
39
|
+
client: httpx.AsyncClient | None = None,
|
|
40
|
+
request_headers: Mapping[str, str] | None = None,
|
|
41
|
+
) -> ControlplaneAnalyticsIdentity | None:
|
|
42
|
+
"""Resolve analytics identity from a trusted auth-service validation call.
|
|
43
|
+
|
|
44
|
+
`request_headers` is accepted for call-site convenience, but renderer-supplied
|
|
45
|
+
identity or auth URL headers are intentionally ignored.
|
|
46
|
+
"""
|
|
47
|
+
_ = request_headers
|
|
48
|
+
if not token or not config or not config.auth_base_url:
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
auth_base_url = config.auth_base_url.rstrip("/")
|
|
52
|
+
url = f"{auth_base_url}/v1/auth/validate"
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
if client is not None:
|
|
56
|
+
response = await client.post(url, json={"token": token})
|
|
57
|
+
else:
|
|
58
|
+
async with httpx.AsyncClient(timeout=config.timeout_seconds) as new_client:
|
|
59
|
+
response = await new_client.post(url, json={"token": token})
|
|
60
|
+
except httpx.HTTPError:
|
|
61
|
+
return None
|
|
62
|
+
|
|
63
|
+
if response.status_code != 200:
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
validated = _ValidateTokenResponse.model_validate(response.json())
|
|
68
|
+
except (ValueError, ValidationError):
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
if not validated.analytics_user_id or not validated.analytics_org_id:
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
return ControlplaneAnalyticsIdentity(
|
|
75
|
+
analytics_user_id=validated.analytics_user_id,
|
|
76
|
+
analytics_org_id=validated.analytics_org_id,
|
|
77
|
+
)
|
|
@@ -117,9 +117,10 @@ def resolve_desktop_request_context(request: Request) -> DesktopRequestContext:
|
|
|
117
117
|
graph_name = None
|
|
118
118
|
if config is not None and project_name is not None:
|
|
119
119
|
try:
|
|
120
|
-
data_config = config.
|
|
120
|
+
data_config = config.get_workspace_data_config(
|
|
121
121
|
project_name,
|
|
122
122
|
worktree_id=None,
|
|
123
|
+
workspace_name=workspace_name,
|
|
123
124
|
)
|
|
124
125
|
except ValueError:
|
|
125
126
|
data_config = None
|