recce-nightly 0.52.0.20250122__tar.gz → 0.52.0.20250126__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. {recce_nightly-0.52.0.20250122/recce_nightly.egg-info → recce_nightly-0.52.0.20250126}/PKG-INFO +1 -1
  2. recce_nightly-0.52.0.20250126/recce/VERSION +1 -0
  3. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/adapter/dbt_adapter/__init__.py +13 -6
  4. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/404.html +1 -1
  5. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/index.html +1 -1
  6. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/index.txt +1 -1
  7. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/breaking.py +31 -21
  8. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126/recce_nightly.egg-info}/PKG-INFO +1 -1
  9. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce_nightly.egg-info/SOURCES.txt +2 -2
  10. recce_nightly-0.52.0.20250122/recce/VERSION +0 -1
  11. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/LICENSE +0 -0
  12. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/README.md +0 -0
  13. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/__init__.py +0 -0
  14. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/adapter/__init__.py +0 -0
  15. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/adapter/base.py +0 -0
  16. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
  17. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/adapter/sqlmesh_adapter.py +0 -0
  18. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/apis/__init__.py +0 -0
  19. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/apis/check_api.py +0 -0
  20. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/apis/check_func.py +0 -0
  21. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/apis/run_api.py +0 -0
  22. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/apis/run_func.py +0 -0
  23. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/artifact.py +0 -0
  24. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/cli.py +0 -0
  25. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/config.py +0 -0
  26. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/core.py +0 -0
  27. {recce_nightly-0.52.0.20250122/recce/data/_next/static/mT45cY9h3mPz3EfSTSSjY → recce_nightly-0.52.0.20250126/recce/data/_next/static/79raEzCsjmSMMSwf82Tf2}/_buildManifest.js +0 -0
  28. {recce_nightly-0.52.0.20250122/recce/data/_next/static/mT45cY9h3mPz3EfSTSSjY → recce_nightly-0.52.0.20250126/recce/data/_next/static/79raEzCsjmSMMSwf82Tf2}/_ssgManifest.js +0 -0
  29. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/157e448a-49151cad1ec51175.js +0 -0
  30. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/29e3cc0d-490dbff344996865.js +0 -0
  31. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/312-3e9b49b718b98737.js +0 -0
  32. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/323-9565a741f1447d32.js +0 -0
  33. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/36e1c10d-3bcdd9bb8564108c.js +0 -0
  34. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/3998a672-e71829c331c77ccb.js +0 -0
  35. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/450c323b-79414be6f43ef15c.js +0 -0
  36. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/47d8844f-ccb4e71fbabd12f3.js +0 -0
  37. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/6dc81886-03da5372308c376d.js +0 -0
  38. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/7a8a3e83-f7fe5f14c56108bf.js +0 -0
  39. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/7f27ae6c-c484e79185298424.js +0 -0
  40. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/868e7b5c-36d94ba5a58a2e6a.js +0 -0
  41. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/9746af58-daab848e55b5faf7.js +0 -0
  42. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/a30376cd-ea4617387c84b12e.js +0 -0
  43. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/app/_not-found/page-c2ee18b5ec3e3d57.js +0 -0
  44. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/app/layout-5b30ab0207459cb8.js +0 -0
  45. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/app/page-5fd8da415e5e06aa.js +0 -0
  46. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/b3b1872b-97ea0be5bd9b42bc.js +0 -0
  47. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/b63b1b3f-13deddaaba264453.js +0 -0
  48. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/c132bf7d-740a7144e614cb2d.js +0 -0
  49. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/ce84277d-ced9559f73764a27.js +0 -0
  50. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/cf0511cf-88e5bf54e88504a3.js +0 -0
  51. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/fee69bc6-2cf346c884a74e9d.js +0 -0
  52. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -0
  53. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/main-45628b9d5f140527.js +0 -0
  54. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/main-app-19c0918a6bb54549.js +0 -0
  55. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/pages/_app-ff7f75fed61fbef3.js +0 -0
  56. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/pages/_error-5e587f051118d074.js +0 -0
  57. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  58. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/chunks/webpack-300961f547f48fe7.js +0 -0
  59. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/css/1d7428fe54fca42f.css +0 -0
  60. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.5c8b3804.woff +0 -0
  61. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.c03acce9.woff2 +0 -0
  62. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.83d3554a.woff2 +0 -0
  63. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.8a4a9645.woff +0 -0
  64. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-latin-800-normal.388abfc2.woff2 +0 -0
  65. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-latin-800-normal.e7b55ea8.woff +0 -0
  66. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.40cba3c6.woff +0 -0
  67. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.85728e97.woff2 +0 -0
  68. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.0bd05041.woff +0 -0
  69. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.dfbbc7ba.woff2 +0 -0
  70. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/favicon.ico +0 -0
  71. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/imgs/feedback/thumbs-down.png +0 -0
  72. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/imgs/feedback/thumbs-up.png +0 -0
  73. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/data/logo/recce-logo-white.png +0 -0
  74. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/diff.py +0 -0
  75. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/event/CONFIG +0 -0
  76. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/event/SENTRY_DNS +0 -0
  77. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/event/__init__.py +0 -0
  78. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/event/collector.py +0 -0
  79. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/event/track.py +0 -0
  80. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/exceptions.py +0 -0
  81. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/git.py +0 -0
  82. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/github.py +0 -0
  83. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/models/__init__.py +0 -0
  84. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/models/check.py +0 -0
  85. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/models/run.py +0 -0
  86. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/models/types.py +0 -0
  87. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/pull_request.py +0 -0
  88. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/run.py +0 -0
  89. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/server.py +0 -0
  90. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/state.py +0 -0
  91. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/summary.py +0 -0
  92. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/__init__.py +0 -0
  93. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/core.py +0 -0
  94. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/dataframe.py +0 -0
  95. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/histogram.py +0 -0
  96. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/lineage.py +0 -0
  97. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/profile.py +0 -0
  98. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/query.py +0 -0
  99. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/rowcount.py +0 -0
  100. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/schema.py +0 -0
  101. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/top_k.py +0 -0
  102. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/tasks/valuediff.py +0 -0
  103. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/__init__.py +0 -0
  104. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/cache.py +0 -0
  105. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/io.py +0 -0
  106. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/logger.py +0 -0
  107. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/pydantic_model.py +0 -0
  108. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/recce_cloud.py +0 -0
  109. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/util/singleton.py +0 -0
  110. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce/yaml/__init__.py +0 -0
  111. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce_nightly.egg-info/dependency_links.txt +0 -0
  112. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce_nightly.egg-info/entry_points.txt +0 -0
  113. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce_nightly.egg-info/requires.txt +0 -0
  114. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/recce_nightly.egg-info/top_level.txt +0 -0
  115. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/setup.cfg +0 -0
  116. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/setup.py +0 -0
  117. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/__init__.py +0 -0
  118. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/adapter/__init__.py +0 -0
  119. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/adapter/dbt_adapter/__init__.py +0 -0
  120. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/adapter/dbt_adapter/conftest.py +0 -0
  121. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -0
  122. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -0
  123. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/adapter/dbt_adapter/test_selector.py +0 -0
  124. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/__init__.py +0 -0
  125. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/conftest.py +0 -0
  126. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_histogram.py +0 -0
  127. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_lineage.py +0 -0
  128. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_preset_checks.py +0 -0
  129. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_profile.py +0 -0
  130. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_query.py +0 -0
  131. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_row_count.py +0 -0
  132. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_schema.py +0 -0
  133. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_top_k.py +0 -0
  134. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/tasks/test_valuediff.py +0 -0
  135. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_cli.py +0 -0
  136. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_config.py +0 -0
  137. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_core.py +0 -0
  138. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_dbt.py +0 -0
  139. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_pull_request.py +0 -0
  140. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_server.py +0 -0
  141. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_state.py +0 -0
  142. {recce_nightly-0.52.0.20250122 → recce_nightly-0.52.0.20250126}/tests/test_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: recce-nightly
3
- Version: 0.52.0.20250122
3
+ Version: 0.52.0.20250126
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -0,0 +1 @@
1
+ 0.52.0.20250126
@@ -9,9 +9,14 @@ from functools import lru_cache
9
9
  from pathlib import Path
10
10
  from typing import Callable, Dict, List, Optional, Tuple, Iterator, Any, Set, Union, Literal, Type
11
11
 
12
- import agate
13
- import dbt.adapters.factory
14
- from dbt.contracts.state import PreviousState
12
+ try:
13
+ import agate
14
+ import dbt.adapters.factory
15
+ from dbt.contracts.state import PreviousState
16
+ except ImportError as e:
17
+ print("Error: dbt module not found. Please install it by running:")
18
+ print("pip install dbt-core dbt-<adapter>")
19
+ raise e
15
20
  from watchdog.events import FileSystemEventHandler
16
21
  from watchdog.observers import Observer
17
22
 
@@ -510,8 +515,9 @@ class DbtAdapter(BaseAdapter):
510
515
  parser = SqlBlockParser(self.runtime_config, manifest, self.runtime_config)
511
516
 
512
517
  if dbt_version >= dbt_version.parse('v1.8'):
513
- from dbt_common.context import set_invocation_context
518
+ from dbt_common.context import set_invocation_context, get_invocation_context
514
519
  set_invocation_context({})
520
+ get_invocation_context()._env = dict(os.environ)
515
521
 
516
522
  node_id = str("generated_" + uuid.uuid4().hex)
517
523
  node = parser.parse_remote(sql_template, node_id)
@@ -703,14 +709,15 @@ class DbtAdapter(BaseAdapter):
703
709
  from recce.util.breaking import is_breaking_change
704
710
  base_sql = self.generate_sql(base_node.get('raw_code'))
705
711
  curr_sql = self.generate_sql(curr_node.get('raw_code'))
706
- if not is_breaking_change(base_sql, curr_sql):
712
+ dialect = self.adapter.connections.TYPE
713
+ if not is_breaking_change(base_sql, curr_sql, dialect=dialect):
707
714
  change_category = 'non-breaking'
708
715
  except Exception:
709
716
  pass
710
717
 
711
718
  diff[key] = NodeDiff(change_status='modified', change_category=change_category)
712
719
  elif base_node:
713
- diff[key] = NodeDiff(chnage_status='removed')
720
+ diff[key] = NodeDiff(change_status='removed')
714
721
  elif curr_node:
715
722
  diff[key] = NodeDiff(change_status='added')
716
723
  return LineageDiff(
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-300961f547f48fe7.js"/><script src="/_next/static/chunks/157e448a-49151cad1ec51175.js" async=""></script><script src="/_next/static/chunks/312-3e9b49b718b98737.js" async=""></script><script src="/_next/static/chunks/main-app-19c0918a6bb54549.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-300961f547f48fe7.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:I[16892,[],\"\"]\n3:I[60299,[],\"\"]\n4:I[43276,[],\"\"]\na:I[28103,[],\"\"]\n5:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n6:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n7:{\"display\":\"inline-block\"}\n8:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nb:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L1\",null,{\"buildId\":\"mT45cY9h3mPz3EfSTSSjY\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L2\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$5\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$6\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$8\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$L9\"],\"globalErrorComponent\":\"$a\",\"missingSlots\":\"$Wb\"}]\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n2:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-300961f547f48fe7.js"/><script src="/_next/static/chunks/157e448a-49151cad1ec51175.js" async=""></script><script src="/_next/static/chunks/312-3e9b49b718b98737.js" async=""></script><script src="/_next/static/chunks/main-app-19c0918a6bb54549.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-300961f547f48fe7.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:I[16892,[],\"\"]\n3:I[60299,[],\"\"]\n4:I[43276,[],\"\"]\na:I[28103,[],\"\"]\n5:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n6:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n7:{\"display\":\"inline-block\"}\n8:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nb:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L1\",null,{\"buildId\":\"79raEzCsjmSMMSwf82Tf2\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L2\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$5\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$6\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$8\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$L9\"],\"globalErrorComponent\":\"$a\",\"missingSlots\":\"$Wb\"}]\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n2:null\n"])</script></body></html>
@@ -24,4 +24,4 @@
24
24
  transparent 0%,
25
25
  #3182ce 50%,
26
26
  transparent 100%
27
- );position:absolute;will-change:left;min-width:50%;-webkit-animation:animation-11lmxjq 1s ease infinite normal none running;animation:animation-11lmxjq 1s ease infinite normal none running;}@-webkit-keyframes animation-11lmxjq{0%{left:-40%;}100%{left:100%;}}@keyframes animation-11lmxjq{0%{left:-40%;}100%{left:100%;}}</style><div style="width:0%" data-indeterminate="" aria-valuemax="100" aria-valuemin="0" role="progressbar" class="css-h5ends"></div></div></div><div class="css-0"></div></div></div></div><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-300961f547f48fe7.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/1d7428fe54fca42f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[16892,[],\"\"]\n4:I[38443,[],\"ClientPageRoot\"]\n5:I[17149,[\"524\",\"static/chunks/b3b1872b-97ea0be5bd9b42bc.js\",\"434\",\"static/chunks/868e7b5c-36d94ba5a58a2e6a.js\",\"678\",\"static/chunks/3998a672-e71829c331c77ccb.js\",\"509\",\"static/chunks/9746af58-daab848e55b5faf7.js\",\"648\",\"static/chunks/ce84277d-ced9559f73764a27.js\",\"989\",\"static/chunks/47d8844f-ccb4e71fbabd12f3.js\",\"147\",\"static/chunks/a30376cd-ea4617387c84b12e.js\",\"995\",\"static/chunks/fee69bc6-2cf346c884a74e9d.js\",\"739\",\"static/chunks/7a8a3e83-f7fe5f14c56108bf.js\",\"283\",\"static/chunks/450c323b-79414be6f43ef15c.js\",\"303\",\"static/chunks/36e1c10d-3bcdd9bb8564108c.js\",\"22\",\"static/chunks/29e3cc0d-490dbff344996865.js\",\"25\",\"static/chunks/b63b1b3f-13deddaaba264453.js\",\"355\",\"static/chunks/7f27ae6c-c484e79185298424.js\",\"495\",\"static/chunks/6dc81886-03da5372308c376d.js\",\"599\",\"static/chunks/c132bf7d-740a7144e614cb2d.js\",\"852\",\"static/chunks/cf0511cf-88e5bf54e88504a3.js\",\"323\",\"static/chunks/323-9565a741f1447d32.js\",\"931\",\"static/chunks/app/page-5fd8da415e5e06aa.js\"],\"default\",1]\n6:I[60299,[],\"\"]\n7:I[43276,[],\"\"]\n9:I[28103,[],\"\"]\na:[]\n0:[\"$\",\"$L2\",null,{\"buildId\":\"mT45cY9h3mPz3EfSTSSjY\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"\"],\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1d7428fe54fca42f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]],null],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helv"])</script><script>self.__next_f.push([1,"etica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"32x32\"}]]\n3:null\n"])</script></body></html>
27
+ );position:absolute;will-change:left;min-width:50%;-webkit-animation:animation-11lmxjq 1s ease infinite normal none running;animation:animation-11lmxjq 1s ease infinite normal none running;}@-webkit-keyframes animation-11lmxjq{0%{left:-40%;}100%{left:100%;}}@keyframes animation-11lmxjq{0%{left:-40%;}100%{left:100%;}}</style><div style="width:0%" data-indeterminate="" aria-valuemax="100" aria-valuemin="0" role="progressbar" class="css-h5ends"></div></div></div><div class="css-0"></div></div></div></div><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-300961f547f48fe7.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/1d7428fe54fca42f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[16892,[],\"\"]\n4:I[38443,[],\"ClientPageRoot\"]\n5:I[17149,[\"524\",\"static/chunks/b3b1872b-97ea0be5bd9b42bc.js\",\"434\",\"static/chunks/868e7b5c-36d94ba5a58a2e6a.js\",\"678\",\"static/chunks/3998a672-e71829c331c77ccb.js\",\"509\",\"static/chunks/9746af58-daab848e55b5faf7.js\",\"648\",\"static/chunks/ce84277d-ced9559f73764a27.js\",\"989\",\"static/chunks/47d8844f-ccb4e71fbabd12f3.js\",\"147\",\"static/chunks/a30376cd-ea4617387c84b12e.js\",\"995\",\"static/chunks/fee69bc6-2cf346c884a74e9d.js\",\"739\",\"static/chunks/7a8a3e83-f7fe5f14c56108bf.js\",\"283\",\"static/chunks/450c323b-79414be6f43ef15c.js\",\"303\",\"static/chunks/36e1c10d-3bcdd9bb8564108c.js\",\"22\",\"static/chunks/29e3cc0d-490dbff344996865.js\",\"25\",\"static/chunks/b63b1b3f-13deddaaba264453.js\",\"355\",\"static/chunks/7f27ae6c-c484e79185298424.js\",\"495\",\"static/chunks/6dc81886-03da5372308c376d.js\",\"599\",\"static/chunks/c132bf7d-740a7144e614cb2d.js\",\"852\",\"static/chunks/cf0511cf-88e5bf54e88504a3.js\",\"323\",\"static/chunks/323-9565a741f1447d32.js\",\"931\",\"static/chunks/app/page-5fd8da415e5e06aa.js\"],\"default\",1]\n6:I[60299,[],\"\"]\n7:I[43276,[],\"\"]\n9:I[28103,[],\"\"]\na:[]\n0:[\"$\",\"$L2\",null,{\"buildId\":\"79raEzCsjmSMMSwf82Tf2\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"\"],\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1d7428fe54fca42f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]],null],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helv"])</script><script>self.__next_f.push([1,"etica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"32x32\"}]]\n3:null\n"])</script></body></html>
@@ -2,6 +2,6 @@
2
2
  3:I[17149,["524","static/chunks/b3b1872b-97ea0be5bd9b42bc.js","434","static/chunks/868e7b5c-36d94ba5a58a2e6a.js","678","static/chunks/3998a672-e71829c331c77ccb.js","509","static/chunks/9746af58-daab848e55b5faf7.js","648","static/chunks/ce84277d-ced9559f73764a27.js","989","static/chunks/47d8844f-ccb4e71fbabd12f3.js","147","static/chunks/a30376cd-ea4617387c84b12e.js","995","static/chunks/fee69bc6-2cf346c884a74e9d.js","739","static/chunks/7a8a3e83-f7fe5f14c56108bf.js","283","static/chunks/450c323b-79414be6f43ef15c.js","303","static/chunks/36e1c10d-3bcdd9bb8564108c.js","22","static/chunks/29e3cc0d-490dbff344996865.js","25","static/chunks/b63b1b3f-13deddaaba264453.js","355","static/chunks/7f27ae6c-c484e79185298424.js","495","static/chunks/6dc81886-03da5372308c376d.js","599","static/chunks/c132bf7d-740a7144e614cb2d.js","852","static/chunks/cf0511cf-88e5bf54e88504a3.js","323","static/chunks/323-9565a741f1447d32.js","931","static/chunks/app/page-5fd8da415e5e06aa.js"],"default",1]
3
3
  4:I[60299,[],""]
4
4
  5:I[43276,[],""]
5
- 0:["mT45cY9h3mPz3EfSTSSjY",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/1d7428fe54fca42f.css","precedence":"next","crossOrigin":"$undefined"}]]],null],null]},[[null,["$","html",null,{"lang":"en","children":["$","body",null,{"suppressHydrationWarning":true,"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
5
+ 0:["79raEzCsjmSMMSwf82Tf2",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/1d7428fe54fca42f.css","precedence":"next","crossOrigin":"$undefined"}]]],null],null]},[[null,["$","html",null,{"lang":"en","children":["$","body",null,{"suppressHydrationWarning":true,"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
6
6
  6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"recce"}],["$","meta","3",{"name":"description","content":"Recce: Data validation toolkit for comprehensive PR review"}],["$","link","4",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"32x32"}]]
7
7
  1:null
@@ -6,15 +6,21 @@ def is_breaking_change(original_sql, modified_sql, dialect=None):
6
6
  return False
7
7
 
8
8
  try:
9
- from sqlglot import parse_one, diff
9
+ from sqlglot import parse_one, diff, Dialect
10
10
  from sqlglot.diff import Insert, Keep
11
11
  import sqlglot.expressions as exp
12
12
  except ImportError:
13
13
  return True
14
14
 
15
15
  try:
16
- original_ast = optimize(parse_one(original_sql, dialect=dialect))
17
- modified_ast = optimize(parse_one(modified_sql, dialect=dialect))
16
+ dialect = Dialect.get(dialect)
17
+
18
+ def _parse(sql):
19
+ ast = parse_one(sql, dialect=dialect)
20
+ return optimize(ast, dialect=dialect)
21
+
22
+ original_ast = _parse(original_sql)
23
+ modified_ast = _parse(modified_sql)
18
24
  except Exception:
19
25
  return True
20
26
 
@@ -27,31 +33,35 @@ def is_breaking_change(original_sql, modified_sql, dialect=None):
27
33
  e.expression for e in edits if isinstance(e, Insert)
28
34
  }
29
35
 
36
+ VALID_EXPRESSIONS = (
37
+ exp.Where,
38
+ exp.Join,
39
+ exp.Order,
40
+ exp.Group,
41
+ exp.Having,
42
+ exp.Limit,
43
+ exp.Offset,
44
+ exp.Window,
45
+ exp.Union,
46
+ exp.Intersect,
47
+ exp.Except,
48
+ exp.Merge,
49
+ exp.Delete,
50
+ exp.Update,
51
+ exp.Insert,
52
+ exp.Subquery,
53
+ )
54
+
30
55
  for edit in edits:
31
56
  if isinstance(edit, Insert):
32
57
  inserted_expr = edit.expression
33
- VALID_EXPRESSIONS = (
34
- exp.Where,
35
- exp.Join,
36
- exp.Order,
37
- exp.Group,
38
- exp.Having,
39
- exp.Limit,
40
- exp.Offset,
41
- exp.Window,
42
- exp.Union,
43
- exp.Intersect,
44
- exp.Except,
45
- exp.Merge,
46
- exp.Delete,
47
- exp.Update,
48
- exp.Insert,
49
- exp.Subquery,
50
- )
51
58
 
52
59
  if isinstance(inserted_expr, VALID_EXPRESSIONS):
53
60
  return True
54
61
 
62
+ if isinstance(inserted_expr, exp.UDTF):
63
+ return True
64
+
55
65
  if (
56
66
  not isinstance(inserted_expr.parent, exp.Select) and
57
67
  inserted_expr.parent not in inserted_expressions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: recce-nightly
3
- Version: 0.52.0.20250122
3
+ Version: 0.52.0.20250126
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -30,6 +30,8 @@ recce/data/404.html
30
30
  recce/data/favicon.ico
31
31
  recce/data/index.html
32
32
  recce/data/index.txt
33
+ recce/data/_next/static/79raEzCsjmSMMSwf82Tf2/_buildManifest.js
34
+ recce/data/_next/static/79raEzCsjmSMMSwf82Tf2/_ssgManifest.js
33
35
  recce/data/_next/static/chunks/157e448a-49151cad1ec51175.js
34
36
  recce/data/_next/static/chunks/29e3cc0d-490dbff344996865.js
35
37
  recce/data/_next/static/chunks/312-3e9b49b718b98737.js
@@ -61,8 +63,6 @@ recce/data/_next/static/chunks/app/_not-found/page-c2ee18b5ec3e3d57.js
61
63
  recce/data/_next/static/chunks/pages/_app-ff7f75fed61fbef3.js
62
64
  recce/data/_next/static/chunks/pages/_error-5e587f051118d074.js
63
65
  recce/data/_next/static/css/1d7428fe54fca42f.css
64
- recce/data/_next/static/mT45cY9h3mPz3EfSTSSjY/_buildManifest.js
65
- recce/data/_next/static/mT45cY9h3mPz3EfSTSSjY/_ssgManifest.js
66
66
  recce/data/_next/static/media/montserrat-cyrillic-800-normal.5c8b3804.woff
67
67
  recce/data/_next/static/media/montserrat-cyrillic-800-normal.c03acce9.woff2
68
68
  recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.83d3554a.woff2
@@ -1 +0,0 @@
1
- 0.52.0.20250122