sql-code-graph 1.37.0__tar.gz → 1.37.1__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.
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.gitignore +3 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/PKG-INFO +1 -1
- sql_code_graph-1.37.1/plan/metrics/lineage_gold_set_synthetic.json +374 -0
- sql_code_graph-1.37.1/plan/research/snowflake_oracle_groundtruth_prep.md +245 -0
- sql_code_graph-1.37.1/plan/sprints/lineage_gold_regression_and_temp_collapse.md +472 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/pyproject.toml +1 -1
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/__init__.py +1 -1
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/f_brand.sql +7 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/f_compo.sql +7 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/f_fx.sql +7 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/f_loc.sql +5 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/f_orders.sql +7 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/gmdf/f_freight_cost.sql +61 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/gmdf/f_freight_ktn.sql +58 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/int/gmdf/f_freight_misc.sql +68 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/template/dim_person_temp.sql +15 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/template/dim_staff.sql +26 -0
- sql_code_graph-1.37.1/tests/fixtures/gold_set/template/f_compet_article.sql +35 -0
- sql_code_graph-1.37.1/tests/integration/test_lineage_gold_set.py +255 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/uv.lock +1 -1
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/api-documenter.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/architect-planner.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/architect-reviewer.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/code-reviewer.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/developer.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/plan-reviewer.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.claude/agents/sprint-planner.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/workflows/benchmark.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/workflows/e2e-tests.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/workflows/release.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.github/workflows/test.yml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.pre-commit-config.yaml +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/.sqlcgignore +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/ARCHITECTURE_REVIEW.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/ARCHITECTURE_REVIEW_ARCHIVE.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/CHANGELOG.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/CLAUDE.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/README.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/docs/AIRBNB_PARSE_REPORT.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/docs/cli.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/docs/getting-started.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/docs/releasing-pypi.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/e2e_firstuser_report.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/e2e_run_20260528_101413.output +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/main.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/WORKFLOW.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/measurements/pr2_catalog_load_eval.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/measurements/pr3_repo_native_plateau.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/measurements/pr4_transform_kinds.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/measurements/pr5_extraction_recall_taxonomy.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/measurements/sprint_08_changelogs_fullindex.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/measurements/sprint_08_fullcorpus_index.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/createkind_dwh_after.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/createkind_dwh_before.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_1.29.0_05c6943.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_1.30.0_2c8ac25.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_1.30.1_26271fc.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_1.31.0_a40c837.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_1.32.0_c1bec3c.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_1.36.2_f6a335a.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/gain_drop_alter_phantom_baseline_v1361.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/identifier_live_acceptance.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/identifier_live_after_v1.36.0.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/identifier_live_before_v1.35.3.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/lineage5_dwh_after_pr5.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/lineage5_dwh_before_master.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/pr4_star_promote_after.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/pr4_star_promote_before.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/pr_b_phantom_after.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/pr_b_phantom_before.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/pr_c_merge_after.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/pr_c_merge_before.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/schema_comparison_with_schema.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/schema_comparison_without_schema.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/sprint_08_changelogs_fullindex.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/sprint_08_fullcorpus_index.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/metrics/sprint_pool_300s_plan.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/column_coverage_diagnostic.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/column_coverage_findings.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/dwh_graph_analysis.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/dwh_positional_insert_column_blindspot.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/feature_acceptance_dwh.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/graph_health_sprint_postmortem.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/island_lever_live_verification.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/issue38_pr2_live_acceptance.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/issue38_pr3_live_acceptance.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/lineage_identity_sprint_postmortem.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/pr_impact_followups_2026-06-14.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/sprint_03_v0.3.1_postmortem.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/sprint_3.1_postmortem.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/reports/v1_14_dialect_query_config_postmortem.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/blueprint.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/coverage_parse_failure_diagnosis.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/investigation_e5_e4.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/observed_usage_overlay_query_history_tableau.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/parse_diagnostics.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/parsing_errors_experiment.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/snowflake_en_test_suite.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/sql_only_coverage_lever_post_pr2.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/research/sqlcg.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/bundle_claude_skill.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/ci_tests_pool_flake_fix.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/column_lineage_recall_metric.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/coverage_p1_p3_p4.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/coverage_p1_p5_metric.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/coverage_parse_failures.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/diff-impact-producer-file.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/e8_dual_emission.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/feature_34_unused_presentation_segregation.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/feature_35_external_downstream_injection.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/feature_F2_bundle_claude_skill.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/feature_generic_var_name_resolution.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/feature_kuzu_to_duckdb_migration.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_backward_self_heal_index_at_sha.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_downstream_sink_location.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_drop_alter_phantom_source_node.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_dynamic_table_parsing.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_expand_qualify_perf.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_firstuser_findings.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_issue29_live_test_followups.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/fix_schema_case_mismatch.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/gain_coverage_metrics.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/graph_health_catalog_and_metrics.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/hygiene_config_path_and_survivors.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/issue-38-backfill-cte-bridge.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/issue-38-residual-source-extraction.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/issue-38-selects-from-island-lever.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/living_codebase_resync.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/mcp_server_self_healing.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/positional_insert_clone_blindspot.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_01.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_01_deployment_pypi.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_02.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_02_v0.3.0_core.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_03.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_04_column_lineage.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_04_column_lineage_fix.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_05_star_resolution.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_06_lineage_coverage.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_07_open_ecodes.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_07_perf_and_live_test.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_08_perf_upsert.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_09_lineage_coverage.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_10_anchor_tools.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_11_v1.0.2_bugfix.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_12_v1.1.0.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_13_v1.1.0_cluster_b.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_lineage_identity_and_session_context.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/sprint_postmortem_fixes.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/temp_table_namespacing.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/trust_layer.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/unfilled_table_impact.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1.1.0_cluster_b_provenance_trust.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1.1.0_live_graph_freshness.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1.1.1_batch_upsert_perf.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1.14.0_dialect_and_query_config_fixes.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1_1_2_bugfix.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1_1_3_union_cte_star.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1_2_0_read_proxy.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/v1_2_1_bugfix.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/version-parity-and-restart.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/plan/sprints/viz_usability_neighborhood_highlight.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/profile.html +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/pyrightconfig.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/scripts/collect_parse_errors.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/scripts/column_coverage_check.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/scripts/generate_cli_docs.sh +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/__main__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/analyze.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/catalog.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/db.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/find.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/gain.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/git.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/index.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/install.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/mcp.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/reindex.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/report.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/uninstall.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/viz.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/commands/watch.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/coverage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/cli/main.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/config.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/duckdb_backend.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/freshness.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/graph_db.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/jobs.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/noise_match.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/queries.cypher +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/queries.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/queries.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/schema.cypher +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/core/schema.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/dbt_adapter.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/error_classify.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/git_delta.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/indexer.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/pool.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/walker.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/indexer/watcher.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/lineage/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/lineage/aggregator.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/lineage/schema_resolver.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/metrics/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/metrics/store.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/ansi_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/base.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/bigquery_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/dynamic_name.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/postgres_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/registry.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/snowflake_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/parsers/tsql_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/control.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/exceptions.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/models.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/noise_filter.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/read_client.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/selfheal.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/server.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/skill.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/tools.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/server/writer.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/utils/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/utils/hashing.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/utils/ignore.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/utils/logging.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/viz/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/viz/assets/force-graph.min.js +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/viz/assets/template.html +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/viz/data.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/viz/render.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/src/sqlcg/viz/tags.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/adversarial/200_join.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/adversarial/500_union.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/bench_indexer.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/conftest.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/case_normalization.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/colon_cast.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/colon_reserved_word.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/copy_into.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/create_procedure.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/identifier_dynamic.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/lateral_flatten.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/qualify.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/scripting_block.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/golden_corpus/snowflake/three_part.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/tpch/q01.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/tpch/q02.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/tpch/q03.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/tpch/q04.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/benchmarks/tpch/q05.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/conftest.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/conftest.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_F2_skill_install_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_airbnb_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_cli_index.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_empty_impact_cli_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_git_hook_install.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_golden_lineage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_mcp_lifecycle.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_mcp_tools.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_parse_diagnostics_cli.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_pr_impact_cli_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_selfheal_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_star_resolution_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_viz_cli_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/e2e/test_watch.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/dim_hosts_cleansed.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/dim_listings_cleansed.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/fct_reviews.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/mart_fullmoon_reviews.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/raw_hosts.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/raw_listings.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/raw_reviews.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/src_hosts.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/src_listings.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/airbnb/src_reviews.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/bigquery/.gitkeep +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/duckdb_parity/kuzu_reference.json +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/jaffle_shop/customers.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/jaffle_shop/orders.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/jaffle_shop/raw_orders.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/snowflake/base_tables.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/snowflake/reports.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/snowflake/views.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/star_corpus/ddl_src.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/star_corpus/ddl_tgt.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/star_corpus/etl_alias_star.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/star_corpus/etl_star.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/synthetic/base_tables.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/synthetic/reports.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/fixtures/synthetic/views.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/snowflake/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/snowflake/test_identifier_var_sink_resolution_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/snowflake/test_insert_select.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/snowflake/test_qualify_bare_tables_command_guard_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_T34_presentation_segregation.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_T35_external_consumers.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_analyze_case_fold.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_anchor_tools.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_backfill_impact_consistency.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_bare_column_cte_lineage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_bulk_upsert.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_case_split_seed_regression.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_catalog_kind_upgrade.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_catalog_load_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_cli_index_clear_before_rebuild.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_column_coverage_patterns.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_column_lineage_e2e.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_coverage_metrics_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_cross_file_lineage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_cte_key_namespacing_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_cte_recall_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_cte_schema_alias_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_cte_source_node_invariant.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_dialect_auto_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_dialect_matrix.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_duckdb_parity.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_e36_xfile_regression_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_empty_impact_blast_radius.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_empty_index_rollback_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_freshness_mcp.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_gating_join_retrofit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_hygiene_config_root_reconciliation.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_identity_counters_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_impact_consumer_parity.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_incremental_reindex_parity.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_index_degraded_files_metric.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_index_filter_node_exclusion.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_indexer_batching.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_indexer_commits.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_indexer_to_graph.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_issue38_cte_insert_regression.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_join_col_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_key_normalization_chokepoint.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_live_anchors.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_mvcc_rebuild.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_non_table_create_coverage_no_regression.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_non_table_create_kind_in_graph.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_parse_diagnostics.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_phantom_drop_alter_node.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_phantom_non_table_create_node.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_pr1_confidence_reason.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_pr2_source_location.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_pr3_kind_tagging.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_pr_impact_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_qualify_failed_persist.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_read_via_server.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_readonly_under_lock.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_reindex_via_server.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_repo_relative_cte_namespaces.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_resolvable_write_col_edges_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_resync.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_selects_from_completeness.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_selects_from_cte_body_source.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_selects_from_subscope_source.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_single_writer_queue.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_skip_counts_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_star_promote_temp_columns.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_star_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_temp_table_lineage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_temp_table_namespacing.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_tool_version_stamp_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_union_cte_star_recall_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_usage_derived_catalog.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_use_schema_session_context_integration.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_user_surface_recall_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_v141_surface_guards.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_v1_14_0_dialect_and_query_config_fixes.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_view_kind_in_graph.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_viz_data_build.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/integration/test_write_memory_ceiling.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/perf/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/perf/test_perf.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E10/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E11/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E12/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E12/e12_json_path.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E12/e12_lateral_flatten.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E12/test_e12.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E13/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E14/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E15/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E16/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E16/e16_merge.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E16/e16_merge_delete.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E16/test_e16.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E17/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E18/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E18/e18_decode.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E18/e18_iff_decode.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E18/e18_nvl2.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E18/test_e18.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E19/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E2/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E2/e2_expr_alias.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E2/e2_function_alias.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E2/e2_multiply_alias.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E2/test_e2.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E20/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E21/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E21/e21_alias_forward_ref.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E21/e21_three_level_chain.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E21/test_e21.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E22/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E23/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E23/e23_stored_proc.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E23/e23_stored_proc_multi.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E23/test_e23.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E24/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E25/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E25/e25_cross_db.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E25/e25_two_part.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E25/test_e25.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E25/test_e25_full_id.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E26/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E27/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E27/e27_nested_udf.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E27/e27_udf.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E27/test_e27.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E28/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E29/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E3/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E3/e3_alter_table.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E3/e3_create_sequence.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E3/e3_ddl_only.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E3/test_e3.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E30/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E31/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E32/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E33/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E34/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E35/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E36/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E36/e36_temp_multi_use.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E36/e36_temp_table.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E36/test_e36.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E36/test_e36_xfile.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E37/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E38/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E4/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E4/e4_execute_immediate.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E4/e4_if_not_exists.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E4/e4_unexpected_token.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E4/e4_unpivot.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E4/test_e4.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E5/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E5/e5_cte_missing_source.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E5/e5_multi_cte.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E5/e5_nested_cte.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E5/test_e5.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E5/test_e5_cte_projection.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E8/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E8/e8_dynamic_sources.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E8/e8_seq_nextval.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E8/e8_uuid.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E8/test_e8.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E9/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_aggregates/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_aggregates/fixture_sum_absent_cross_schema.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_aggregates/fixture_sum_case_when.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_aggregates/fixture_sum_present_source.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_aggregates/test_e_aggregates.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_date_functions/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_date_functions/fixture_date_aliased.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_date_functions/fixture_date_unaliased.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_date_functions/fixture_datediff_unaliased.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_date_functions/fixture_year_unaliased.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/E_date_functions/test_e_date_functions.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/README.md +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/fixture_etl.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/fixture_omloopsnelheid.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/fixture_semantic.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/fixture_source.sql +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/test_anchor_ma_aantal_op_order.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/anchors/test_anchor_omloopsnelheid.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/conftest.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/snowflake/test_plan_review_gates.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/snowflake/__init__.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/snowflake/test_qualify_bare_tables_command_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/snowflake/test_scripting_noise.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_BugB_escalation_uses_init_path.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_BugC_hook_upgrade.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_F2_install_skill.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_F2_skill_render.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_F2_uninstall_skill.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_T09_01_qualify_once.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_T09_02_ddl_skip.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_T09_04_subprocess_isolate.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_T09_06_log_verbosity.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_T35_config_external_consumers.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_aggregator.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_aggregator_skip.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_analyze_case_fold.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_base_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_branch_monitor.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_bulk_upsert_invariant.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_canonical_target_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_catalog_csv_parsing.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_catalog_missing_warning.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_classify_non_table_create_kind.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_cli.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_cli_doc_flag_staleness.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_cli_help.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_clone_positional_insert_blindspot.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_closure_depth.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_column_lineage_wiring.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_config.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_coverage_metrics.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_cte_key_namespacing.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_cte_source_gap_metric.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_data_models.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_db_info.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_db_info_coverage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_db_path_isolation_fixture.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_doc_links.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_doc_markdown_link_existence.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_dominant_cause.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_duckdb_backend.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_duckdb_backend_shared.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_dynamic_name_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_e5_view_alias_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_e8_dual_emission.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_e8_temp_chain_key_mismatch.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_empty_propagation_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_extract_select_output_columns.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_file_ignore_defaults.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_find_cmd.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_firstuser_findings.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_freshness_helper.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_gain_coverage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_gain_ratio.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_gating_join_field_docstrings.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_git_delta.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_git_hooks.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_git_hooks_notify.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_graph_backend.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_graph_completeness_invariant.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_hard_kill_pool.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_has_column_precedence_upsert.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_hook_reindex_detach.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_hygiene_config_warning.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_identifier_var_sink_resolution.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_identity_counters.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_include_working_tree.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_index_cmd.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_index_filter_config.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_index_flags.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_index_progress.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_index_summary_degraded_metric.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_indexer_progress.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_indexer_quality.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_install.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_install_message.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_issue_63_readonly_lock.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_jobs.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_join_col_resolve_marker.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_judgement.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_lineage_conversion.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_literal_column_skip.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_mcp_best_practices.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_mcp_control.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_mcp_stdio_smoke.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_merge_column_lineage.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_metrics.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_noise_filter.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_normalize_keys.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_parse_failed_classification.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_parse_file_dependency_filter.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_parse_quality.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_parser.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_perf_scaling_guard.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_phantom_drop_alter_source.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_phantom_non_table_create_source.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_pr07_observability.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_pr6_execute_immediate_unwrap.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_pr_impact_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_qualify_failed_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_queries_loader.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_read_client.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_repo_relative_cte_namespaces.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_resolvable_write_col_edges_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_resolve_join_columns_sql.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_resolve_pass2_passes_dependency_filter.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_schema_resolver.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_selects_from_completeness_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_selfheal_detector.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_selfheal_pr1_messages.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_selfheal_reexec.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_selfheal_watcher.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_server.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_skip_counts_persistence.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_snowflake_strip_alter_set_tag.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_sprint_06_t04_t05.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_star_resolution_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_star_schema_unit.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_submit_feedback.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_subprocess_isolate.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_t02_expression_name_extraction.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_t03_ddl_skip.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_temp_table_namespacing.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_timeout_cancel.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_tool_version_stamp.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_tools_hints.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_tools_warnings.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_transform_kind_classification.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_uninstall.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_unknown_sentinel_skip.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_unqualified_fallback.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_upsert_batch_invariant.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_use_schema_session_context.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_version_parity.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_view_classification.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_viz_config_schemas.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_viz_facets.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_viz_render_self_contained.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_walker.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_watcher.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_worker_error_classification.py +0 -0
- {sql_code_graph-1.37.0 → sql_code_graph-1.37.1}/tests/unit/test_writer_queue.py +0 -0
|
@@ -70,6 +70,9 @@ anomaly.csv
|
|
|
70
70
|
|
|
71
71
|
# Local-only golden lineage ground truth — names private DWH columns
|
|
72
72
|
tests/e2e/golden_lineage.yaml
|
|
73
|
+
# Real-name lineage oracle — names private internal DWH tables; NEVER commit.
|
|
74
|
+
# The committed, anonymized oracle is plan/metrics/lineage_gold_set_synthetic.json.
|
|
75
|
+
plan/metrics/lineage_gold_set.json
|
|
73
76
|
# Local-only scratch script for bootstrapping the golden set
|
|
74
77
|
scratch_bootstrap_golden.py
|
|
75
78
|
.claude/worktrees/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sql-code-graph
|
|
3
|
-
Version: 1.37.
|
|
3
|
+
Version: 1.37.1
|
|
4
4
|
Summary: SQL code graph analyzer and lineage tracer
|
|
5
5
|
Project-URL: Homepage, https://github.com/Warhorze/sql-code-graph
|
|
6
6
|
Project-URL: Repository, https://github.com/Warhorze/sql-code-graph
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lineage_gold_set_synthetic",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"created": "2026-06-15",
|
|
5
|
+
"purpose": "SYNTHETIC anonymized hand-labelled table-level lineage edges. Names are fabricated and map 1:1 onto the synthetic fixtures under tests/fixtures/gold_set/. NO real internal names. Re-keyed straight from the real-name oracle (kept out of git); totals hold: 39 present / 4 gating-join correct-absence / 1 star-into-temp residual. in_current_graph reflects the structural COLUMN_LINEAGE edge (transform != TEMP_INLINE).",
|
|
6
|
+
"key_convention": "lowercase schema.table; INSERT targets resolve schema via in-file USE SCHEMA",
|
|
7
|
+
"edges": [
|
|
8
|
+
{
|
|
9
|
+
"src": "raw.src_orders",
|
|
10
|
+
"dst": "mart.f_orders",
|
|
11
|
+
"file": "int/f_orders.sql",
|
|
12
|
+
"line": 5,
|
|
13
|
+
"shape": "single-source INSERT...SELECT",
|
|
14
|
+
"in_current_graph": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"src": "raw.src_compo",
|
|
18
|
+
"dst": "mart.f_compo",
|
|
19
|
+
"file": "int/f_compo.sql",
|
|
20
|
+
"line": 5,
|
|
21
|
+
"shape": "single-source INSERT...SELECT",
|
|
22
|
+
"in_current_graph": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"src": "raw.src_brand",
|
|
26
|
+
"dst": "mart.f_brand",
|
|
27
|
+
"file": "int/f_brand.sql",
|
|
28
|
+
"line": 5,
|
|
29
|
+
"shape": "single-source INSERT...SELECT",
|
|
30
|
+
"in_current_graph": true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"src": "raw.src_loc",
|
|
34
|
+
"dst": "mart.f_loc",
|
|
35
|
+
"file": "int/f_loc.sql",
|
|
36
|
+
"line": 3,
|
|
37
|
+
"shape": "single-source INSERT...SELECT",
|
|
38
|
+
"in_current_graph": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"src": "raw.src_fx",
|
|
42
|
+
"dst": "mart.f_fx",
|
|
43
|
+
"file": "int/f_fx.sql",
|
|
44
|
+
"line": 5,
|
|
45
|
+
"shape": "single-source INSERT...SELECT",
|
|
46
|
+
"in_current_graph": true
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"src": "raw.src_emp_a",
|
|
50
|
+
"dst": "stgmart.dim_staff",
|
|
51
|
+
"file": "template/dim_staff.sql",
|
|
52
|
+
"line": 50,
|
|
53
|
+
"shape": "multi-join INSERT...SELECT",
|
|
54
|
+
"in_current_graph": true
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"src": "raw.src_emp_b",
|
|
58
|
+
"dst": "stgmart.dim_staff",
|
|
59
|
+
"file": "template/dim_staff.sql",
|
|
60
|
+
"line": 54,
|
|
61
|
+
"shape": "multi-join INSERT...SELECT",
|
|
62
|
+
"in_current_graph": true
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"src": "stg.dim_store",
|
|
66
|
+
"dst": "stgmart.dim_staff",
|
|
67
|
+
"file": "template/dim_staff.sql",
|
|
68
|
+
"line": 58,
|
|
69
|
+
"shape": "multi-join INSERT...SELECT",
|
|
70
|
+
"in_current_graph": false,
|
|
71
|
+
"note": "GATING-JOIN only: bouw.* appears only in JOIN/ON predicates, never projected. Correct that no DATA edge exists. Reclassified: not a recall miss.",
|
|
72
|
+
"gating_join_correct_absence": true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"src": "raw.dim_person",
|
|
76
|
+
"dst": "stgmart.dim_staff",
|
|
77
|
+
"file": "template/dim_staff.sql",
|
|
78
|
+
"line": 62,
|
|
79
|
+
"shape": "multi-join INSERT...SELECT",
|
|
80
|
+
"in_current_graph": false,
|
|
81
|
+
"note": "GATING-JOIN only: emp.* used only in ON predicates, not projected. Correct absence, not a recall miss.",
|
|
82
|
+
"gating_join_correct_absence": true
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"src": "stg.dim_contract",
|
|
86
|
+
"dst": "stgmart.dim_staff",
|
|
87
|
+
"file": "template/dim_staff.sql",
|
|
88
|
+
"line": 66,
|
|
89
|
+
"shape": "multi-join INSERT...SELECT",
|
|
90
|
+
"in_current_graph": false,
|
|
91
|
+
"note": "GATING-JOIN only: wc.* used only in ON predicates, not projected. Correct absence, not a recall miss.",
|
|
92
|
+
"gating_join_correct_absence": true
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"src": "stg.dim_dept",
|
|
96
|
+
"dst": "stgmart.dim_staff",
|
|
97
|
+
"file": "template/dim_staff.sql",
|
|
98
|
+
"line": 70,
|
|
99
|
+
"shape": "multi-join INSERT...SELECT",
|
|
100
|
+
"in_current_graph": true
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"src": "raw.src_ord_hdr",
|
|
104
|
+
"dst": "mart.f_freight_ktn",
|
|
105
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
106
|
+
"line": 26,
|
|
107
|
+
"shape": "CTE-mediated INSERT...SELECT (base behind ORDER_TABEL CTE)",
|
|
108
|
+
"in_current_graph": true
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"src": "raw.src_ord_org",
|
|
112
|
+
"dst": "mart.f_freight_ktn",
|
|
113
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
114
|
+
"line": 27,
|
|
115
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
116
|
+
"in_current_graph": true
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"src": "stg.dim_weborder",
|
|
120
|
+
"dst": "mart.f_freight_ktn",
|
|
121
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
122
|
+
"line": 29,
|
|
123
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
124
|
+
"in_current_graph": true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"src": "stg.dim_article",
|
|
128
|
+
"dst": "mart.f_freight_ktn",
|
|
129
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
130
|
+
"line": 31,
|
|
131
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
132
|
+
"in_current_graph": true
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"src": "stg.dim_date",
|
|
136
|
+
"dst": "mart.f_freight_ktn",
|
|
137
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
138
|
+
"line": 78,
|
|
139
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
140
|
+
"in_current_graph": true
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"src": "raw.src_inbound",
|
|
144
|
+
"dst": "mart.f_freight_ktn",
|
|
145
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
146
|
+
"line": 94,
|
|
147
|
+
"shape": "CTE/subquery-mediated INSERT...SELECT",
|
|
148
|
+
"in_current_graph": true
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"src": "raw.src_tariff",
|
|
152
|
+
"dst": "mart.f_freight_ktn",
|
|
153
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
154
|
+
"line": 139,
|
|
155
|
+
"shape": "CTE/subquery-mediated INSERT...SELECT",
|
|
156
|
+
"in_current_graph": true
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"src": "raw.src_colli",
|
|
160
|
+
"dst": "mart.f_freight_ktn",
|
|
161
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
162
|
+
"line": 179,
|
|
163
|
+
"shape": "CTE/subquery-mediated INSERT...SELECT",
|
|
164
|
+
"in_current_graph": true
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"src": "raw.src_pcs",
|
|
168
|
+
"dst": "mart.f_freight_ktn",
|
|
169
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
170
|
+
"line": 213,
|
|
171
|
+
"shape": "CTE/subquery-mediated INSERT...SELECT",
|
|
172
|
+
"in_current_graph": true
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"src": "raw.src_returns",
|
|
176
|
+
"dst": "mart.f_freight_ktn",
|
|
177
|
+
"file": "int/gmdf/f_freight_ktn.sql",
|
|
178
|
+
"line": 264,
|
|
179
|
+
"shape": "CTE/subquery-mediated INSERT...SELECT",
|
|
180
|
+
"in_current_graph": true
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"src": "raw.src_ord_hdr",
|
|
184
|
+
"dst": "mart.f_freight_misc",
|
|
185
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
186
|
+
"line": 34,
|
|
187
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
188
|
+
"in_current_graph": true
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"src": "raw.src_ord_org",
|
|
192
|
+
"dst": "mart.f_freight_misc",
|
|
193
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
194
|
+
"line": 35,
|
|
195
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
196
|
+
"in_current_graph": true
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"src": "stg.dim_weborder",
|
|
200
|
+
"dst": "mart.f_freight_misc",
|
|
201
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
202
|
+
"line": 37,
|
|
203
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
204
|
+
"in_current_graph": true
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"src": "stg.dim_weborderline",
|
|
208
|
+
"dst": "mart.f_freight_misc",
|
|
209
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
210
|
+
"line": 57,
|
|
211
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
212
|
+
"in_current_graph": true
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"src": "raw.src_mail",
|
|
216
|
+
"dst": "mart.f_freight_misc",
|
|
217
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
218
|
+
"line": -1,
|
|
219
|
+
"shape": "subquery-mediated INSERT...SELECT",
|
|
220
|
+
"in_current_graph": true
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"src": "raw.src_voip",
|
|
224
|
+
"dst": "mart.f_freight_misc",
|
|
225
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
226
|
+
"line": -1,
|
|
227
|
+
"shape": "subquery-mediated INSERT...SELECT",
|
|
228
|
+
"in_current_graph": true
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"src": "raw.src_giftcard",
|
|
232
|
+
"dst": "mart.f_freight_misc",
|
|
233
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
234
|
+
"line": -1,
|
|
235
|
+
"shape": "subquery-mediated INSERT...SELECT",
|
|
236
|
+
"in_current_graph": true
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"src": "raw.f_freight_ktn",
|
|
240
|
+
"dst": "mart.f_freight_misc",
|
|
241
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
242
|
+
"line": -1,
|
|
243
|
+
"shape": "cross-file: reads sibling f_freight_ktn output",
|
|
244
|
+
"in_current_graph": true
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"src": "raw.f_freight_cost",
|
|
248
|
+
"dst": "mart.f_freight_misc",
|
|
249
|
+
"file": "int/gmdf/f_freight_misc.sql",
|
|
250
|
+
"line": -1,
|
|
251
|
+
"shape": "cross-file: reads sibling f_freight_cost output",
|
|
252
|
+
"in_current_graph": true
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"src": "stg.src_po",
|
|
256
|
+
"dst": "mart.f_freight_cost",
|
|
257
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
258
|
+
"line": 14,
|
|
259
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
260
|
+
"in_current_graph": true
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"src": "stg.dim_po",
|
|
264
|
+
"dst": "mart.f_freight_cost",
|
|
265
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
266
|
+
"line": 15,
|
|
267
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
268
|
+
"in_current_graph": true
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"src": "stg.dim_weborderline",
|
|
272
|
+
"dst": "mart.f_freight_cost",
|
|
273
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
274
|
+
"line": 20,
|
|
275
|
+
"shape": "subquery-mediated INSERT...SELECT",
|
|
276
|
+
"in_current_graph": false,
|
|
277
|
+
"note": "FILTER-ONLY: appears only inside a WHERE ... IN (subquery) predicate, no column projected to output. Correct absence, not a recall miss.",
|
|
278
|
+
"gating_join_correct_absence": true
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"src": "raw.src_invoice",
|
|
282
|
+
"dst": "mart.f_freight_cost",
|
|
283
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
284
|
+
"line": 41,
|
|
285
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
286
|
+
"in_current_graph": true
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"src": "raw.src_invoiceline",
|
|
290
|
+
"dst": "mart.f_freight_cost",
|
|
291
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
292
|
+
"line": 65,
|
|
293
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
294
|
+
"in_current_graph": true
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"src": "stg.dim_article",
|
|
298
|
+
"dst": "mart.f_freight_cost",
|
|
299
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
300
|
+
"line": -1,
|
|
301
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
302
|
+
"in_current_graph": true
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"src": "stg.dim_date",
|
|
306
|
+
"dst": "mart.f_freight_cost",
|
|
307
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
308
|
+
"line": -1,
|
|
309
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
310
|
+
"in_current_graph": true
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"src": "raw.src_inbound",
|
|
314
|
+
"dst": "mart.f_freight_cost",
|
|
315
|
+
"file": "int/gmdf/f_freight_cost.sql",
|
|
316
|
+
"line": -1,
|
|
317
|
+
"shape": "CTE-mediated INSERT...SELECT",
|
|
318
|
+
"in_current_graph": true
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"src": "raw.src_emp_backup",
|
|
322
|
+
"dst": "mart.tmp_emp",
|
|
323
|
+
"file": "template/dim_person_temp.sql",
|
|
324
|
+
"line": 18,
|
|
325
|
+
"shape": "TEMP-chain hop 1: src -> CREATE TEMP",
|
|
326
|
+
"in_current_graph": true,
|
|
327
|
+
"note": "structural hop; temp node namespaced dim_person_temp.sql::mart.tmp_emp"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"src": "mart.tmp_emp",
|
|
331
|
+
"dst": "mart.dim_person",
|
|
332
|
+
"file": "template/dim_person_temp.sql",
|
|
333
|
+
"line": 69,
|
|
334
|
+
"shape": "TEMP-chain hop 2: temp -> final INSERT",
|
|
335
|
+
"in_current_graph": true,
|
|
336
|
+
"note": "structural hop"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"src": "raw.src_emp_backup",
|
|
340
|
+
"dst": "mart.dim_person",
|
|
341
|
+
"file": "template/dim_person_temp.sql",
|
|
342
|
+
"line": -1,
|
|
343
|
+
"shape": "TEMP-collapsed transitive (the TRUE business edge / oracle GT)",
|
|
344
|
+
"in_current_graph": false,
|
|
345
|
+
"note": "NOT emitted as TEMP_INLINE here because IN-hop is SELECT e.* into temp and the source has no indexed DDL columns -> only volgnr reaches the temp -> composition has no matching column. This is the star-into-temp gap; the structural hops exist but the collapsed edge is absent."
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"src": "raw.src_compet_price",
|
|
349
|
+
"dst": "stgmart.f_compet_article",
|
|
350
|
+
"file": "template/f_compet_article.sql",
|
|
351
|
+
"line": 35,
|
|
352
|
+
"shape": "TEMP+CTE-mediated; TEMP_INLINE fires (explicit cols)",
|
|
353
|
+
"in_current_graph": true,
|
|
354
|
+
"note": "20 TEMP_INLINE collapsed edges emitted here; structural hops also present"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"src": "stg.dim_art2",
|
|
358
|
+
"dst": "stgmart.f_compet_article",
|
|
359
|
+
"file": "template/f_compet_article.sql",
|
|
360
|
+
"line": -1,
|
|
361
|
+
"shape": "TEMP-mediated, collapsed via TEMP_INLINE",
|
|
362
|
+
"in_current_graph": true
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"src": "stg.dim_compet",
|
|
366
|
+
"dst": "stgmart.f_compet_article",
|
|
367
|
+
"file": "template/f_compet_article.sql",
|
|
368
|
+
"line": -1,
|
|
369
|
+
"shape": "TEMP-mediated, collapsed via TEMP_INLINE",
|
|
370
|
+
"in_current_graph": true
|
|
371
|
+
}
|
|
372
|
+
],
|
|
373
|
+
"source_note": "Anonymized 1:1 from the local-only real-name oracle; mapping not committed."
|
|
374
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Snowflake ACCESS_HISTORY ground-truth oracle — groundwork research
|
|
2
|
+
|
|
3
|
+
> **ANONYMIZED for the public repo.** All table/column/file names below are SYNTHETIC and map onto `tests/fixtures/gold_set/` + `plan/metrics/lineage_gold_set_synthetic.json`. The original real-name research (naming private internal DWH objects) is kept local-only and is NOT committed.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
**Date:** 2026-06-15
|
|
7
|
+
**Status:** Research. Nothing implemented, nothing planned. Read-only investigation on
|
|
8
|
+
live corpus + parser source. Feeds a future planner for the `ACCESS_HISTORY`-as-oracle
|
|
9
|
+
(Tier 3) work in [`observed_usage_overlay_query_history_tableau.md`](observed_usage_overlay_query_history_tableau.md).
|
|
10
|
+
**Author context:** dispatched to answer three gating questions before any oracle plan.
|
|
11
|
+
|
|
12
|
+
## Lead verdict (FINDING 1 — the gate)
|
|
13
|
+
|
|
14
|
+
**The graph TODAY retains the FULL per-hop temp trace AND additively emits the collapsed
|
|
15
|
+
edge. Both representations coexist.** The temp-collapse-for-diff primitive can READ
|
|
16
|
+
existing structural hops directly — no preservation work is needed first. VERDICT:
|
|
17
|
+
**per-hop temp edges are already PRESERVED; the diff primitive reads them as-is.**
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## FINDING 1 — Does the graph retain per-hop temp trace, or collapse it?
|
|
22
|
+
|
|
23
|
+
### The question
|
|
24
|
+
For a real `src → TEMP → final` chain, does the graph store TWO hops (`src→temp`,
|
|
25
|
+
`temp→final`, temp node having real in/out edges) OR a single collapsed `src→final`
|
|
26
|
+
("TEMP_INLINE"), OR both? This determines whether the eventual temp-collapse-for-diff
|
|
27
|
+
primitive can READ existing hops, or whether per-hop temp edges must first be PRESERVED.
|
|
28
|
+
|
|
29
|
+
### Method
|
|
30
|
+
- Read the parser's temp pipeline: [`base.py:519-556`](../../src/sqlcg/parsers/base.py)
|
|
31
|
+
(temp identity / namespacing), [`base.py:1200-1234`](../../src/sqlcg/parsers/base.py)
|
|
32
|
+
(temp leaf stamped `role="temp"`, namespaced key), and
|
|
33
|
+
[`ansi_parser.py:264`](../../src/sqlcg/parsers/ansi_parser.py) →
|
|
34
|
+
[`_emit_transitive_temp_edges`](../../src/sqlcg/parsers/ansi_parser.py) (`:273-…`).
|
|
35
|
+
- Read the recall/health exclusion: [`coverage.py:69,83,368,382`](../../src/sqlcg/cli/coverage.py)
|
|
36
|
+
(`WHERE cl.transform IS DISTINCT FROM 'TEMP_INLINE'` + `t.kind IN ('cte','derived','temp')`).
|
|
37
|
+
- Read the indexer edge persistence: [`indexer.py:1780`](../../src/sqlcg/indexer/indexer.py)
|
|
38
|
+
(`edge.transform` stored on every COLUMN_LINEAGE row) and the dedup precedence at
|
|
39
|
+
[`indexer.py:182-201`](../../src/sqlcg/indexer/indexer.py) (structural never replaced by TEMP_INLINE).
|
|
40
|
+
- **Parsed two REAL corpus files** (no full reindex; one-file `parse_file` calls, free-mem ~1.7GB,
|
|
41
|
+
one process) with `SnowflakeParser(SchemaResolver(dialect='snowflake'))` on master (v1.36.0).
|
|
42
|
+
|
|
43
|
+
### Findings (measured fact)
|
|
44
|
+
|
|
45
|
+
**Example A — [`dim_person_temp.sql`](tests/fixtures/gold_set/template/dim_person_temp.sql)**
|
|
46
|
+
chain: `raw.src_emp_backup → tmp_emp → mart.dim_person`.
|
|
47
|
+
The parser emitted, as distinct table-level structural edges:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
CREATE_TABLE raw.src_emp_backup [table] -> dim_person_temp.sql::mart.tmp_emp [temp] (line 18)
|
|
51
|
+
INSERT dim_person_temp.sql::mart.tmp_emp [temp] -> mart.dim_person [table] (line 69)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
So the temp node `dim_person_temp.sql::mart.tmp_emp` (namespaced, `role="temp"`)
|
|
55
|
+
carries a **real incoming edge** and a **real outgoing edge** — TWO hops, fact.
|
|
56
|
+
|
|
57
|
+
**Example B — [`f_compet_article.sql`](tests/fixtures/gold_set/template/f_compet_article.sql)**
|
|
58
|
+
chain: 4 base tables → `tmp_f_compet_article` → `stgmart.f_compet_article`.
|
|
59
|
+
Parser emitted **5 structural hops** into/out of the temp node **PLUS 20 TEMP_INLINE
|
|
60
|
+
collapsed edges** (`transform='TEMP_INLINE'`), e.g. `raw.src_compet_price → stgmart.f_compet_article`.
|
|
61
|
+
So here **BOTH** the per-hop trace and the collapsed edge exist simultaneously.
|
|
62
|
+
|
|
63
|
+
### Why the two examples differ (load-bearing nuance)
|
|
64
|
+
In Example A the IN-hop is `SELECT e.*, ROW_NUMBER()… AS volgnr FROM src`. The `e.*`
|
|
65
|
+
star **does not expand** into per-column edges (the source has no indexed DDL columns),
|
|
66
|
+
so the temp's only *named* incoming column is `volgnr`. The OUT-hop consumes 27 explicit
|
|
67
|
+
named columns, none of which is `volgnr`. `_emit_transitive_temp_edges` composes
|
|
68
|
+
`x→temp→y` **by matching temp column NAME** ([`ansi_parser.py:273-308`](../../src/sqlcg/parsers/ansi_parser.py)),
|
|
69
|
+
so **0** TEMP_INLINE edges fire. In Example B the IN-hop projects explicit named columns,
|
|
70
|
+
the names match, and 20 collapsed edges fire.
|
|
71
|
+
|
|
72
|
+
**Measured fact:** structural per-hop edges are present in BOTH cases. **Inference:** the
|
|
73
|
+
collapsed `src→final` TEMP_INLINE edge is present only when the temp's incoming columns
|
|
74
|
+
are named (not `SELECT *` into a column-less source). This is the **star-into-temp gap**.
|
|
75
|
+
|
|
76
|
+
### Verdict (FINDING 1)
|
|
77
|
+
- **Per-hop temp trace: ALWAYS PRESERVED.** The temp is a namespaced `role="temp"` node
|
|
78
|
+
with real `COLUMN_LINEAGE` in and out edges; `transform` is persisted per edge
|
|
79
|
+
([`indexer.py:1780`](../../src/sqlcg/indexer/indexer.py)); structural hops are
|
|
80
|
+
recall/health-counted ([`coverage.py:69,83`](../../src/sqlcg/cli/coverage.py)).
|
|
81
|
+
- **Collapsed `src→final`: present additively when columns are named, absent on star-into-temp;**
|
|
82
|
+
always excluded from recall/health (`transform='TEMP_INLINE'`,
|
|
83
|
+
[`coverage.py:368,382,864`](../../src/sqlcg/cli/coverage.py)).
|
|
84
|
+
- **BOTH** representations exist (when TEMP_INLINE fires); structural-only when it doesn't.
|
|
85
|
+
|
|
86
|
+
**Decision this informs:** the temp-collapse-for-diff primitive can READ existing
|
|
87
|
+
structural hops to build a temp-collapsed closure on OUR side — no schema change, no
|
|
88
|
+
preservation pass needed. It must NOT depend on the existing TEMP_INLINE edge being
|
|
89
|
+
present (the star-into-temp gap means it is sometimes absent); it should compose the
|
|
90
|
+
**structural** hops itself (same `x→temp→y` logic, but keyed on the temp NODE, not on
|
|
91
|
+
column-name match, so star-into-temp chains still collapse at table grain).
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## FINDING 2 — Edge model for the oracle (design spec, not code)
|
|
96
|
+
|
|
97
|
+
### Hard invariant (state it, do not violate)
|
|
98
|
+
> **The stored graph MUST retain the full per-hop temp trace. Temp collapse for diffing
|
|
99
|
+
> is COMPARISON-TIME ONLY and NON-DESTRUCTIVE.** The whole DWH is temp-mediated (277/…
|
|
100
|
+
> SQL files create temp tables — grep below); collapsing the stored graph would destroy
|
|
101
|
+
> impact analysis and is irreversible. The oracle diff builds a *transient* temp-collapsed
|
|
102
|
+
> view of both sides at comparison time and discards it.
|
|
103
|
+
|
|
104
|
+
This invariant is already honoured by the codebase: TEMP_INLINE is *additive* and the
|
|
105
|
+
dedup precedence ([`indexer.py:196-201`](../../src/sqlcg/indexer/indexer.py)) forbids a
|
|
106
|
+
derived edge from shadowing a structural one. The oracle must follow the same discipline
|
|
107
|
+
— never mutate stored hops.
|
|
108
|
+
|
|
109
|
+
### Both sides temp-collapsed identically before diffing
|
|
110
|
+
A temp-mediated ETL chain must NOT register as a false recall-miss. Per the architect
|
|
111
|
+
review §(b) (verified on-branch), Snowflake's `ACCESS_HISTORY` records `src→temp` and
|
|
112
|
+
`temp→final` as **two separate per-query rows and never the transitive `src→final`** — it
|
|
113
|
+
does not stitch temps across statements. Our graph also stores two structural hops. So:
|
|
114
|
+
|
|
115
|
+
- **OUR side (`E_ours*`):** compose structural hops through every `role="temp"` /
|
|
116
|
+
`kind IN ('cte','derived','temp')` node to a bounded-depth fixpoint, then drop edges
|
|
117
|
+
with a temp endpoint. Equivalent to the existing TEMP_INLINE composition but driven off
|
|
118
|
+
structural hops (so it is robust to the star-into-temp gap). For the oracle comparison
|
|
119
|
+
the TEMP_INLINE edges may be *counted in the numerator* (architect §(b) rule 3) — but
|
|
120
|
+
they stay out of the internal `edge_health_*` self-metric.
|
|
121
|
+
- **ORACLE side (`E_oracle*`):** contract temp nodes out of the per-row oracle edges the
|
|
122
|
+
same way (architect §(b) rules 1-2), then drop temp-endpoint edges, leaving only
|
|
123
|
+
persistent endpoints.
|
|
124
|
+
|
|
125
|
+
Both sides then have identical temp-collapsed semantics → comparable. **TEMP_INLINE counts
|
|
126
|
+
in the oracle numerator** (for temp-mediated chains it is the only edge that matches the
|
|
127
|
+
oracle's collapsed GT); it is reported separately from `edge_health_*`.
|
|
128
|
+
|
|
129
|
+
### baseSources-derived, persistent endpoints only, OBJECT_DEPENDENCIES as falsifier
|
|
130
|
+
- Derive oracle table edges from **`OBJECTS_MODIFIED[].columns[].baseSources`** collapsed
|
|
131
|
+
to table grain (architect §(c) correction to §3.1) — NOT the `BASE_OBJECTS_ACCESSED ×
|
|
132
|
+
OBJECTS_MODIFIED` array cross product, which over-approximates within multi-target queries
|
|
133
|
+
and artificially depresses recall. Keep the cross product only as a labelled coarse upper bound.
|
|
134
|
+
- Restrict the closed `E_oracle*` to **persistent endpoints** (non-temp, non-transient),
|
|
135
|
+
classified by a **structural** signal (CREATE TEMP/TRANSIENT DDL via QUERY_HISTORY join,
|
|
136
|
+
or the ephemeral-objectId heuristic) — **NOT** name patterns and **NOT** `objectDomain`
|
|
137
|
+
(a TEMPORARY table reports `objectDomain="Table"`; architect §3.2 step-5 correction).
|
|
138
|
+
- **`OBJECT_DEPENDENCIES`** is the exact, non-windowed view-layer falsifier: a view→base
|
|
139
|
+
edge we have that it contradicts is a parser bug; one it confirms is GT regardless of
|
|
140
|
+
the window. It does NOT cover temp/transient or one-off DML — complement, not replacement.
|
|
141
|
+
|
|
142
|
+
### Risks the architect review flagged — quantify what is measurable here
|
|
143
|
+
- **baseSources population rate:** CANNOT be measured without warehouse access (no
|
|
144
|
+
ACCESS_HISTORY rows on this box). Open. This is the single biggest unknown for the oracle
|
|
145
|
+
denominator — if `baseSources` is sparsely populated, the oracle under-counts and recall
|
|
146
|
+
is overstated. Must be measured on a live export before any plan commits.
|
|
147
|
+
- **Dynamic-SQL / IDENTIFIER($var) provenance:** `ACCESS_HISTORY` captures the *executed*
|
|
148
|
+
objects (a strength), but the producing `QUERY_ID` is the inner execution, complicating the
|
|
149
|
+
`client_environment`/`QUERY_TAG` provenance join (the session tag is on the outer call).
|
|
150
|
+
Corpus-side `IDENTIFIER($var)` prevalence is already known from prior research (the 142-file
|
|
151
|
+
lever; generic-var resolution shipped v1.36.0, +777 resolvable edges). For the oracle this
|
|
152
|
+
is a name-matching residual, not a blocker.
|
|
153
|
+
- **Star-into-temp gap (NEW, measured here):** when a CREATE TEMP uses `SELECT *` from a
|
|
154
|
+
column-less source, our TEMP_INLINE edge does not fire (Example A). The structural hops
|
|
155
|
+
still exist, so a *node-keyed* (not column-keyed) temp collapse on OUR side recovers the
|
|
156
|
+
table-grain edge. Prevalence: see below — likely material given how common `SELECT e.*`
|
|
157
|
+
into a temp is in this DWH. The diff primitive MUST collapse on structural hops, not rely
|
|
158
|
+
on TEMP_INLINE presence.
|
|
159
|
+
|
|
160
|
+
### Prevalence (measured fact)
|
|
161
|
+
- **277 SQL files** create a temp/transient table
|
|
162
|
+
(`grep -rilE "create\s+(or replace\s+)?(temporary|temp|transient)\s+table"` on dwh).
|
|
163
|
+
Temp-mediation is the dominant ETL shape, so the temp-collapse step is not optional —
|
|
164
|
+
it gates the whole oracle metric (architect: "the single most common pattern in this DWH").
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## FINDING 3 — Hand-labelled gold set (usable today)
|
|
169
|
+
|
|
170
|
+
Saved as [`lineage_gold_set.json`](../metrics/lineage_gold_set.json): **44 KNOWN-TRUE
|
|
171
|
+
table→table edges** drawn from 8 real corpus files, each verified by reading the SQL, each
|
|
172
|
+
checked against what the CURRENT parser (master v1.36.0) produces.
|
|
173
|
+
|
|
174
|
+
### Result (measured fact)
|
|
175
|
+
| Bucket | Count | Meaning |
|
|
176
|
+
|--------|-------|---------|
|
|
177
|
+
| Present as structural edge | **39 / 44** | parser correctly extracts the data edge |
|
|
178
|
+
| Correct-by-design absence (gating/filter join) | **4** | table joined only in ON / WHERE-IN predicate, never projected → correctly NO data edge |
|
|
179
|
+
| Real candidate gap | **1** | `raw.src_emp_backup → mart.dim_person` (the star-into-temp TEMP_INLINE non-firing in Example A; both structural hops present, collapsed edge absent) |
|
|
180
|
+
|
|
181
|
+
The 4 "absences" were initially logged as misses, then read-verified as the **gating-join**
|
|
182
|
+
distinction the project already ships a metric for (e.g. `stg.dim_store`, `raw.dim_person`,
|
|
183
|
+
`stg.dim_contract` in [`dim_staff.sql`](tests/fixtures/gold_set/template/dim_staff.sql)
|
|
184
|
+
appear only in JOIN/ON predicates; `stg.dim_weborderline` in
|
|
185
|
+
[`f_freight_cost.sql`](tests/fixtures/gold_set/int/gmdf/f_freight_cost.sql)
|
|
186
|
+
only in a `WHERE … IN (subquery)`). These are CORRECT for column/data lineage and are
|
|
187
|
+
labelled `gating_join_correct_absence: true` in the JSON.
|
|
188
|
+
|
|
189
|
+
### Interpretation
|
|
190
|
+
On unambiguous single- and multi-source `INSERT…SELECT` and CTE-mediated writes the current
|
|
191
|
+
parser is **correct** (39/39 of the data-bearing edges; 4/4 correct absences). The only gap
|
|
192
|
+
is the temp-transitive collapse on star-into-temp — exactly the FINDING-1 mechanism. The
|
|
193
|
+
gold set is a usable **correctness oracle today**: re-run it after any parser change to catch
|
|
194
|
+
regressions, and as the tie-breaker for the temp-closure logic the architect review specified
|
|
195
|
+
(no automated Snowflake source emits the `src→final` temp-collapsed edge directly).
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Classification
|
|
200
|
+
|
|
201
|
+
| Finding | Class | Reasoning |
|
|
202
|
+
|---------|-------|-----------|
|
|
203
|
+
| Per-hop temp trace preserved + TEMP_INLINE additive | **non-issue** (already done) | structural hops always stored; diff primitive reads them as-is |
|
|
204
|
+
| Star-into-temp: TEMP_INLINE doesn't fire on `SELECT *` into column-less source | **coverage lever** (for the oracle), bounded | structural hops exist, so a node-keyed collapse recovers the table edge; only the column-grain collapsed edge is lost |
|
|
205
|
+
| baseSources population rate / dynamic-SQL provenance | **future-proofing / open** | unmeasurable without a live ACCESS_HISTORY export |
|
|
206
|
+
| Gold set (44 edges) | **active asset** | usable today as a regression oracle, independent of ACCESS_HISTORY |
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Ranked recommendation (what to build first)
|
|
211
|
+
|
|
212
|
+
1. **Comparison-time temp-collapse primitive that composes STRUCTURAL hops (node-keyed),
|
|
213
|
+
non-destructive.** This is the #1 oracle prerequisite and FINDING 1 proves the inputs
|
|
214
|
+
already exist. Build it to collapse `x→temp→y` at table grain off the structural edges
|
|
215
|
+
(robust to the star-into-temp gap), NOT off the TEMP_INLINE edges. Validate against the
|
|
216
|
+
gold set's temp chains. No graph mutation.
|
|
217
|
+
2. **Wire the gold set into a cheap CI/regression check NOW** (44 edges, no warehouse). It
|
|
218
|
+
already pays off: it pins the 39 correct edges and the 4 gating-join absences so a future
|
|
219
|
+
refactor can't silently regress them.
|
|
220
|
+
3. **Defer the ACCESS_HISTORY ingest itself until a live `baseSources` export is measured.**
|
|
221
|
+
The denominator depends entirely on `baseSources` population, which is unmeasured here.
|
|
222
|
+
Pull a small windowed export first, measure population rate + temp prevalence in the
|
|
223
|
+
arrays, THEN plan the overlay.
|
|
224
|
+
|
|
225
|
+
### Risks / what would change the verdict
|
|
226
|
+
- If `baseSources` is sparsely populated on the live account, the oracle denominator is
|
|
227
|
+
unreliable and Tier 3 should be reconsidered before building. (Verdict on FINDING 1 is
|
|
228
|
+
unaffected — it is purely about OUR graph.)
|
|
229
|
+
- If the star-into-temp gap turns out to affect a large share of temp chains at *table*
|
|
230
|
+
grain too (not just column grain), the node-keyed collapse in rec #1 becomes load-bearing
|
|
231
|
+
rather than a nicety. Measure star-into-temp prevalence (below) before sizing it.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## What I could NOT determine
|
|
236
|
+
- **`baseSources` population rate** on the live account — no ACCESS_HISTORY access from this
|
|
237
|
+
box; needs a live export. This is the gating unknown for the oracle denominator.
|
|
238
|
+
- **Star-into-temp prevalence across the 277 temp files** — I confirmed the mechanism on 1
|
|
239
|
+
file (Example A) and its absence on another (Example B) but did NOT count how many of the
|
|
240
|
+
277 temp-creating files use `SELECT *`/`SELECT alias.*` into a column-less-source temp.
|
|
241
|
+
A grep + per-file parse over the 277 would quantify how much of the temp-collapse must run
|
|
242
|
+
on structural hops vs. can lean on existing TEMP_INLINE. Recommend measuring before sizing rec #1.
|
|
243
|
+
- **OBJECT_DEPENDENCIES view-layer agreement rate** — needs the live export; not checkable here.
|
|
244
|
+
- **Whether any temp/permanent NAME COLLISION exists in the live arrays** (architect §(b) rule 4
|
|
245
|
+
danger zone) — needs the export; our side is safe (temps are namespaced) but the oracle side is not.
|