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.
Files changed (300) hide show
  1. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/CHANGELOG.md +20 -0
  2. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/PKG-INFO +2 -1
  3. typedef_data_intelligence-0.27.0/docs/reference/SEMANTIC_DIFF_HARNESS.md +130 -0
  4. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/pyproject.toml +3 -1
  5. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/app.py +45 -29
  6. typedef_data_intelligence-0.27.0/src/lineage/api/controlplane_identity.py +77 -0
  7. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_context.py +2 -1
  8. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_quickstart.py +278 -31
  9. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_setup.py +370 -317
  10. typedef_data_intelligence-0.27.0/src/lineage/api/desktop_sync.py +2476 -0
  11. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_wizard_sync.py +2 -0
  12. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_workspaces.py +1235 -63
  13. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_worktree.py +907 -314
  14. typedef_data_intelligence-0.27.0/src/lineage/api/posthog_analytics.py +351 -0
  15. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/pydantic.py +2 -6
  16. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/ephemeral_lineage_report.py +3 -4
  17. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/runner.py +7 -1
  18. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/__init__.py +1 -0
  19. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/cli.py +186 -0
  20. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/db_names.py +82 -0
  21. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/dbt_compile.py +87 -0
  22. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/diff_runner.py +63 -0
  23. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/fixtures/column_rename_downstream/fixture.yaml +18 -0
  24. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/fixtures/column_rename_downstream/mutation.diff +469 -0
  25. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/fixtures_loader.py +107 -0
  26. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/ingest.py +51 -0
  27. typedef_data_intelligence-0.27.0/src/lineage/devtools/unified_graph/semantic_diff/source_prep.py +88 -0
  28. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/surreal/desktop_mcp.py +191 -64
  29. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/unified_cli.py +40 -2
  30. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/mcp/runner.py +14 -10
  31. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/typedef_cli.py +2 -2
  32. typedef_data_intelligence-0.27.0/src/lineage/utils/dbt_profile.py +281 -0
  33. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_databricks_setup.py +165 -17
  34. typedef_data_intelligence-0.27.0/tests/api/test_desktop_posthog.py +1289 -0
  35. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_quickstart.py +19 -8
  36. typedef_data_intelligence-0.27.0/tests/api/test_desktop_setup_env_vars.py +58 -0
  37. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_sync.py +80 -38
  38. typedef_data_intelligence-0.27.0/tests/api/test_desktop_sync_render_profile.py +347 -0
  39. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_telemetry.py +59 -2
  40. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_r3_r10.py +35 -0
  41. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_summary.py +5 -48
  42. typedef_data_intelligence-0.27.0/tests/api/test_desktop_workspaces_wizard.py +176 -0
  43. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_worktree.py +12 -18
  44. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_worktree_clone.py +13 -36
  45. typedef_data_intelligence-0.27.0/tests/api/test_workspace_clone_settings.py +286 -0
  46. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_worktree_registry_workspaces_shape.py +7 -1
  47. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/lineage/test_search_enum_coverage.py +1 -0
  48. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/conftest.py +0 -24
  49. typedef_data_intelligence-0.27.0/tests/docs/test_desktop_posthog_event_docs.py +213 -0
  50. typedef_data_intelligence-0.27.0/tests/integration/test_semantic_diff_harness.py +70 -0
  51. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/mcp/test_desktop_mcp_retry.py +114 -48
  52. typedef_data_intelligence-0.27.0/tests/mcp/test_list_projects.py +216 -0
  53. typedef_data_intelligence-0.27.0/tests/unit/devtools/test_semdiff_harness_units.py +418 -0
  54. typedef_data_intelligence-0.27.0/tests/unit/utils/__init__.py +0 -0
  55. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_dbt_docs_generate.py +29 -0
  56. typedef_data_intelligence-0.27.0/tests/unit/utils/test_dbt_profile.py +301 -0
  57. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_run_dbt_command.py +56 -0
  58. typedef_data_intelligence-0.26.2/src/lineage/api/desktop_projects.py +0 -1317
  59. typedef_data_intelligence-0.26.2/src/lineage/api/desktop_sync.py +0 -1553
  60. typedef_data_intelligence-0.26.2/tests/api/test_desktop_projects.py +0 -1785
  61. typedef_data_intelligence-0.26.2/tests/api/test_desktop_projects_env_vars.py +0 -7
  62. typedef_data_intelligence-0.26.2/tests/api/test_desktop_workspaces_wizard.py +0 -76
  63. typedef_data_intelligence-0.26.2/tests/api/test_workspace_schema_write_targets.py +0 -363
  64. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.dockerignore +0 -0
  65. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.env.example +0 -0
  66. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.gitignore +0 -0
  67. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/.justfile_help.txt +0 -0
  68. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/Dockerfile +0 -0
  69. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/Dockerfile.dev +0 -0
  70. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/Justfile +0 -0
  71. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/MODEL_USAGE.md +0 -0
  72. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/README.md +0 -0
  73. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/README.pypi.md +0 -0
  74. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.api.yml +0 -0
  75. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.cli.yml +0 -0
  76. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.desktop.yml +0 -0
  77. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.ingest.unified.yml +0 -0
  78. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/config.ingest.yml +0 -0
  79. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docker-entrypoint.dev.sh +0 -0
  80. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/LINEAR_TICKETING_BACKEND.md +0 -0
  81. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/BUSINESS_CONCEPT_INDEX.md +0 -0
  82. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/CLUSTERING_ALGORITHM_DECISION.md +0 -0
  83. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/GENERIC_REPORT_SCHEMA.md +0 -0
  84. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/HYBRID_ANALYSIS_ARCHITECTURE.md +0 -0
  85. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/PHASE2_IR_STITCHING.md +0 -0
  86. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/PIPELINE_PRIMITIVES_USECASES.md +0 -0
  87. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/SALESFORCE_REPORT_IR.md +0 -0
  88. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/SEMANTIC_JOIN_RESOLUTION.md +0 -0
  89. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/architecture/SEMANTIC_SCHEMA_DESIGN.md +0 -0
  90. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/AGENT_DESIGN_NOTES.md +0 -0
  91. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/COLUMN_PROFILING.md +0 -0
  92. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/COLUMN_PROFILING_IMPLEMENTATION.md +0 -0
  93. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/EXTRACTION_DETECTION.md +0 -0
  94. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/PERFORMANCE_AND_QUALITY_SPECIALISTS.md +0 -0
  95. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/design/STREAMING_SUBAGENT_ARCHITECTURE.md +0 -0
  96. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/examples/memory_usage_examples.py +0 -0
  97. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/examples/pydantic_tool_customization_example.py +0 -0
  98. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/ADDING_LINEAGE_BACKEND.md +0 -0
  99. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/AGENT_USER_GUIDE.md +0 -0
  100. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/CLI_USAGE_EXAMPLES.md +0 -0
  101. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/GETTING_STARTED.md +0 -0
  102. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/MEMORY_SYSTEM.md +0 -0
  103. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/MIGRATION_THREE_SQL.md +0 -0
  104. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/SALESFORCE_AUTH.md +0 -0
  105. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/SCOPE_LEVEL_LINEAGE_GUIDE.md +0 -0
  106. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/SEMANTIC_DIMENSIONS_GUIDE.md +0 -0
  107. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/docs/reference/TYPE_ENUMS.md +0 -0
  108. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/pytest.ini +0 -0
  109. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/create_salesforce_reports.py +0 -0
  110. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/data_generation/utils.py +0 -0
  111. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/databricks-smoke.py +0 -0
  112. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/delete_salesforce_reports.py +0 -0
  113. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/populate_salesforce_schema.py +0 -0
  114. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/replay_events.py +0 -0
  115. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/reset_demo_git_workspace.py +0 -0
  116. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/reset_demo_linear.py +0 -0
  117. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/snowflake_server.py +0 -0
  118. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-engine-bench.sh +0 -0
  119. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-fts-b2-corpus.sh +0 -0
  120. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-fts-bench.sh +0 -0
  121. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/surreal-fts-quality.sh +0 -0
  122. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/scripts/tui/pilotty-smoke.sh +0 -0
  123. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/snowflake-mcp-config.yaml +0 -0
  124. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/__init__.py +0 -0
  125. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/auth_context.py +0 -0
  126. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/collector.py +0 -0
  127. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/concept_cards.py +0 -0
  128. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_agents.py +0 -0
  129. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/desktop_runtime.py +0 -0
  130. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/graph_availability.py +0 -0
  131. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/ontology.py +0 -0
  132. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/api/semantic_runtime.py +0 -0
  133. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/cli.py +0 -0
  134. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/__init__.py +0 -0
  135. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/clustering_metrics.py +0 -0
  136. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/drop_snowflake_tables.py +0 -0
  137. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/eval_clustering.py +0 -0
  138. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/list_ephemeral_models.py +0 -0
  139. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/refingerprint_cache.py +0 -0
  140. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/regen_semantic_goldens.py +0 -0
  141. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/reset_git_workspace.py +0 -0
  142. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/reset_linear_workspace.py +0 -0
  143. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/reset_project.py +0 -0
  144. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/run_dbt_workflow.py +0 -0
  145. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/semantic_goldens.py +0 -0
  146. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/__init__.py +0 -0
  147. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_bench.py +0 -0
  148. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_cells.py +0 -0
  149. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_corpus.py +0 -0
  150. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_corpus_dump.py +0 -0
  151. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_coverage.py +0 -0
  152. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_coverage_report.py +0 -0
  153. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_oracle.py +0 -0
  154. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_quality.py +0 -0
  155. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/fts_quality_bench.py +0 -0
  156. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/log_parse.py +0 -0
  157. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/surreal_bench/report.py +0 -0
  158. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/__init__.py +0 -0
  159. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/devtools/unified_graph/surreal/__init__.py +0 -0
  160. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/mcp/__init__.py +0 -0
  161. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/mcp/server.py +0 -0
  162. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/templates/__init__.py +0 -0
  163. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/templates/typedef_config.yaml.j2 +0 -0
  164. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/AGENTS.md +0 -0
  165. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/CLAUDE.md +0 -0
  166. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/__init__.py +0 -0
  167. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/app.py +0 -0
  168. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/backend.py +0 -0
  169. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/perf.py +0 -0
  170. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/__init__.py +0 -0
  171. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/activity.py +0 -0
  172. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/artifacts.py +0 -0
  173. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/chat.py +0 -0
  174. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/daemon.py +0 -0
  175. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/help.py +0 -0
  176. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/key_inspector.py +0 -0
  177. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/placeholders.py +0 -0
  178. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/shortcuts.py +0 -0
  179. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/status.py +0 -0
  180. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/screens/tickets.py +0 -0
  181. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/styles.tcss +0 -0
  182. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/theme.py +0 -0
  183. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/__init__.py +0 -0
  184. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/__init__.py +0 -0
  185. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/artifact_types.py +0 -0
  186. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/builders.py +0 -0
  187. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/cell_renderers.py +0 -0
  188. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/formatters.py +0 -0
  189. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/helpers.py +0 -0
  190. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/artifacts/viewer.py +0 -0
  191. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/widgets/image.py +0 -0
  192. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/__init__.py +0 -0
  193. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/base.py +0 -0
  194. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/__init__.py +0 -0
  195. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/helpers.py +0 -0
  196. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/__init__.py +0 -0
  197. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/backend.py +0 -0
  198. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/config.py +0 -0
  199. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/cube.py +0 -0
  200. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/dbt_source.py +0 -0
  201. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/integration_base.py +0 -0
  202. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/linear.py +0 -0
  203. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/looker.py +0 -0
  204. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/project.py +0 -0
  205. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/salesforce.py +0 -0
  206. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/snowflake.py +0 -0
  207. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/init/steps/validation.py +0 -0
  208. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/project_selector.py +0 -0
  209. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/styles.tcss +0 -0
  210. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/tui/wizards/sync_progress.py +0 -0
  211. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/__init__.py +0 -0
  212. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/databricks.py +0 -0
  213. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/databricks_oauth.py +0 -0
  214. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/dbt.py +0 -0
  215. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/drop_snowflake_objects.py +0 -0
  216. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/env.py +0 -0
  217. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/git.py +0 -0
  218. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/gitignore.py +0 -0
  219. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/logging.py +0 -0
  220. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/run_snowflake_query.py +0 -0
  221. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/src/lineage/utils/snowflake.py +0 -0
  222. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/__init__.py +0 -0
  223. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_concept_cards.py +0 -0
  224. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_agents_runtime.py +0 -0
  225. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_clerk_auth.py +0 -0
  226. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_context_reader_cache.py +0 -0
  227. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_databricks_oauth.py +0 -0
  228. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_diagnostics.py +0 -0
  229. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_runtime.py +0 -0
  230. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_salesforce.py +0 -0
  231. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_save_env_credentials.py +0 -0
  232. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_search.py +0 -0
  233. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_setup.py +0 -0
  234. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_setup_clone.py +0 -0
  235. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces.py +0 -0
  236. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_delete.py +0 -0
  237. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_integrations.py +0 -0
  238. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_preview_name.py +0 -0
  239. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_desktop_workspaces_projects_and_repos.py +0 -0
  240. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_graph_availability_any_sentinel.py +0 -0
  241. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_health_readiness.py +0 -0
  242. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_surreal_graph_availability.py +0 -0
  243. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_validate_project_collisions.py +0 -0
  244. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/api/test_wizard_create_project_integration_persistence.py +0 -0
  245. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/__init__.py +0 -0
  246. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/lineage/__init__.py +0 -0
  247. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/backends/lineage/test_surreal_search.py +0 -0
  248. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/__init__.py +0 -0
  249. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/__init__.py +0 -0
  250. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_fts_cells.py +0 -0
  251. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_fts_coverage.py +0 -0
  252. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_fts_quality.py +0 -0
  253. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_log_parse.py +0 -0
  254. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/devtools/surreal_bench/test_report.py +0 -0
  255. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/integration/__init__.py +0 -0
  256. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/mcp/__init__.py +0 -0
  257. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/mcp/test_server.py +0 -0
  258. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_dbt_venv_helpers.py +0 -0
  259. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_git_utils.py +0 -0
  260. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_gitignore_utils.py +0 -0
  261. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_helpers_semantic.py +0 -0
  262. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_model_tier_validation.py +0 -0
  263. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_sf_login_cli.py +0 -0
  264. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_template_yaml_escaping.py +0 -0
  265. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_typedef_cli_import_budget.py +0 -0
  266. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/test_unified_cli_airflow.py +0 -0
  267. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_activity_screen.py +0 -0
  268. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_chat_mode_switching.py +0 -0
  269. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_chat_shortcuts.py +0 -0
  270. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_copy_shortcuts.py +0 -0
  271. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_daemon_shortcuts.py +0 -0
  272. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_exit_shortcuts.py +0 -0
  273. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_startup_flow.py +0 -0
  274. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_app_tickets_shortcuts.py +0 -0
  275. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_artifact_viewer_icons.py +0 -0
  276. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_artifacts_screen.py +0 -0
  277. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_backend_manager_lifecycle.py +0 -0
  278. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_activity_modal_guard.py +0 -0
  279. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_agent_header.py +0 -0
  280. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_artifact_viewer_mount_guard.py +0 -0
  281. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_screen_input_behavior.py +0 -0
  282. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_chat_slash_commands.py +0 -0
  283. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_daemon_screen_shortcuts.py +0 -0
  284. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_daemon_screen_styling.py +0 -0
  285. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_diagnostics_widget.py +0 -0
  286. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_help_screen_shortcuts.py +0 -0
  287. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_key_inspector_screen.py +0 -0
  288. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_shortcuts_screen.py +0 -0
  289. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_status_bar_hints.py +0 -0
  290. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_status_screen.py +0 -0
  291. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_tickets_focus_styles.py +0 -0
  292. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_tickets_screen_styling.py +0 -0
  293. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_tui_perf_logging.py +0 -0
  294. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_wizard_async_auto_advance.py +0 -0
  295. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/tui/test_wizard_style_parity.py +0 -0
  296. {typedef_data_intelligence-0.26.2/tests/unit/formula → typedef_data_intelligence-0.27.0/tests/unit/devtools}/__init__.py +0 -0
  297. {typedef_data_intelligence-0.26.2/tests/unit/utils → typedef_data_intelligence-0.27.0/tests/unit/formula}/__init__.py +0 -0
  298. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_databricks_utils.py +0 -0
  299. {typedef_data_intelligence-0.26.2 → typedef_data_intelligence-0.27.0}/tests/unit/utils/test_logging.py +0 -0
  300. {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.26.2
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.26.2"
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"]
@@ -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. Dual-write keeps legacy callers
270
- # working until PR 6 cleanup.
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.get_project_data_config(
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 may live per-project (projects.<name>.ticket) or
455
- # at the top level (ticket:). Prefer the project-level config.
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
- _dp = _ucfg_for_tickets.default_project
460
- _proj = (
461
- _ucfg_for_tickets.projects.get(_dp)
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 _proj and _proj.ticket and _proj.ticket.enabled:
466
- _ticket_cfg = _proj.ticket
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
- # Find the relevant LinearTicketConfig, preferring project-level config
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
- if cfg.default_project and cfg.projects:
801
- proj = cfg.projects.get(cfg.default_project)
802
- if proj and isinstance(proj.ticket, LinearTicketConfig):
803
- linear_cfg = proj.ticket
804
-
805
- # Fall back to top-level ticket config
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.get_project_data_config(active_project)
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.projects and active_project in cfg.projects:
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.get_project_data_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