recce-nightly 1.7.0.20250604__tar.gz → 1.7.0.20250609__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.

Potentially problematic release.


This version of recce-nightly might be problematic. Click here for more details.

Files changed (166) hide show
  1. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/PKG-INFO +3 -1
  2. recce_nightly-1.7.0.20250609/recce/VERSION +1 -0
  3. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/adapter/dbt_adapter/__init__.py +19 -2
  4. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/cli.py +126 -0
  5. recce_nightly-1.7.0.20250609/recce/data/404.html +22 -0
  6. recce_nightly-1.7.0.20250609/recce/data/_next/static/chunks/402-8636abe5d238aff6.js +9 -0
  7. recce_nightly-1.7.0.20250609/recce/data/_next/static/chunks/711-e33b196232addaf6.js +1 -0
  8. recce_nightly-1.7.0.20250604/recce/data/_next/static/chunks/app/layout-c76e6ca2ce9857e9.js → recce_nightly-1.7.0.20250609/recce/data/_next/static/chunks/app/layout-85508f342aee398d.js +1 -1
  9. recce_nightly-1.7.0.20250609/recce/data/_next/static/chunks/app/page-dcb00db748dcd94c.js +1 -0
  10. recce_nightly-1.7.0.20250609/recce/data/_next/static/chunks/webpack-741f2f465598ee9c.js +1 -0
  11. recce_nightly-1.7.0.20250609/recce/data/index.html +27 -0
  12. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/index.txt +3 -3
  13. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/server.py +5 -1
  14. recce_nightly-1.7.0.20250609/recce/util/lineage.py +99 -0
  15. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce_nightly.egg-info/PKG-INFO +3 -1
  16. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce_nightly.egg-info/SOURCES.txt +7 -8
  17. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/setup.py +3 -3
  18. recce_nightly-1.7.0.20250609/tests/adapter/dbt_adapter/conftest.py +17 -0
  19. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/adapter/dbt_adapter/dbt_test_helper.py +6 -0
  20. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/adapter/dbt_adapter/test_dbt_cll.py +53 -0
  21. recce_nightly-1.7.0.20250604/recce/VERSION +0 -1
  22. recce_nightly-1.7.0.20250604/recce/data/404.html +0 -22
  23. recce_nightly-1.7.0.20250604/recce/data/_next/static/chunks/316-9e0164c48e40d69b.js +0 -9
  24. recce_nightly-1.7.0.20250604/recce/data/_next/static/chunks/6ef81909-694dc38134099299.js +0 -1
  25. recce_nightly-1.7.0.20250604/recce/data/_next/static/chunks/711-5ac2c87eb5073191.js +0 -1
  26. recce_nightly-1.7.0.20250604/recce/data/_next/static/chunks/app/page-ba21db901221e31a.js +0 -1
  27. recce_nightly-1.7.0.20250604/recce/data/_next/static/chunks/webpack-8442f6926a7a34ce.js +0 -1
  28. recce_nightly-1.7.0.20250604/recce/data/index.html +0 -27
  29. recce_nightly-1.7.0.20250604/recce/util/lineage.py +0 -34
  30. recce_nightly-1.7.0.20250604/tests/adapter/dbt_adapter/conftest.py +0 -14
  31. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/LICENSE +0 -0
  32. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/README.md +0 -0
  33. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/pyproject.toml +0 -0
  34. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/__init__.py +0 -0
  35. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/adapter/__init__.py +0 -0
  36. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/adapter/base.py +0 -0
  37. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
  38. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/adapter/sqlmesh_adapter.py +0 -0
  39. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/apis/__init__.py +0 -0
  40. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/apis/check_api.py +0 -0
  41. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/apis/check_func.py +0 -0
  42. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/apis/run_api.py +0 -0
  43. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/apis/run_func.py +0 -0
  44. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/artifact.py +0 -0
  45. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/config.py +0 -0
  46. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/core.py +0 -0
  47. {recce_nightly-1.7.0.20250604/recce/data/_next/static/IPcYE_xFRGQRu-KisVCJ6 → recce_nightly-1.7.0.20250609/recce/data/_next/static/UagUixLmMCnvbUQpJdutM}/_buildManifest.js +0 -0
  48. {recce_nightly-1.7.0.20250604/recce/data/_next/static/IPcYE_xFRGQRu-KisVCJ6 → recce_nightly-1.7.0.20250609/recce/data/_next/static/UagUixLmMCnvbUQpJdutM}/_ssgManifest.js +0 -0
  49. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js +0 -0
  50. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js +0 -0
  51. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/350-30608a95db2634b6.js +0 -0
  52. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +0 -0
  53. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js +0 -0
  54. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/3a92ee20-3b5d922d4157af5e.js +0 -0
  55. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js +0 -0
  56. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js +0 -0
  57. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +0 -0
  58. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/700-3b65fc3666820d00.js +0 -0
  59. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js +0 -0
  60. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js +0 -0
  61. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/8d700b6a.ed11a130057c7a47.js +0 -0
  62. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/963-7cb453d3f159e7cc.js +0 -0
  63. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +0 -0
  64. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/a30376cd-ac45432855afb688.js +0 -0
  65. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +0 -0
  66. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js +0 -0
  67. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +0 -0
  68. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js +0 -0
  69. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/cd9f8d63-e020f408095ed77c.js +0 -0
  70. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +0 -0
  71. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +0 -0
  72. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +0 -0
  73. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -0
  74. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +0 -0
  75. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/main-app-0225a2255968e566.js +0 -0
  76. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +0 -0
  77. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +0 -0
  78. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  79. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/css/17a96168e3a9db13.css +0 -0
  80. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/css/1b121dc4d36aeb4d.css +0 -0
  81. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/css/6d6961e0422ac782.css +0 -0
  82. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -0
  83. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  84. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff +0 -0
  85. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff +0 -0
  86. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  87. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  88. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-latin-800-normal.97e20d5e.woff +0 -0
  89. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  90. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff +0 -0
  91. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff +0 -0
  92. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  93. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/_next/static/media/reload-image.79aabb7d.svg +0 -0
  94. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/favicon.ico +0 -0
  95. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/imgs/feedback/thumbs-down.png +0 -0
  96. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/imgs/feedback/thumbs-up.png +0 -0
  97. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/imgs/reload-image.svg +0 -0
  98. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/data/logo/recce-logo-white.png +0 -0
  99. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/diff.py +0 -0
  100. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/event/CONFIG +0 -0
  101. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/event/SENTRY_DNS +0 -0
  102. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/event/__init__.py +0 -0
  103. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/event/collector.py +0 -0
  104. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/event/track.py +0 -0
  105. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/exceptions.py +0 -0
  106. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/git.py +0 -0
  107. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/github.py +0 -0
  108. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/models/__init__.py +0 -0
  109. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/models/check.py +0 -0
  110. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/models/run.py +0 -0
  111. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/models/types.py +0 -0
  112. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/pull_request.py +0 -0
  113. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/run.py +0 -0
  114. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/state.py +0 -0
  115. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/summary.py +0 -0
  116. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/__init__.py +0 -0
  117. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/core.py +0 -0
  118. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/dataframe.py +0 -0
  119. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/histogram.py +0 -0
  120. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/lineage.py +0 -0
  121. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/profile.py +0 -0
  122. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/query.py +0 -0
  123. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/rowcount.py +0 -0
  124. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/schema.py +0 -0
  125. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/top_k.py +0 -0
  126. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/tasks/valuediff.py +0 -0
  127. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/__init__.py +0 -0
  128. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/api_token.py +0 -0
  129. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/breaking.py +0 -0
  130. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/cache.py +0 -0
  131. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/cll.py +0 -0
  132. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/io.py +0 -0
  133. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/logger.py +0 -0
  134. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/pydantic_model.py +0 -0
  135. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/recce_cloud.py +0 -0
  136. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/util/singleton.py +0 -0
  137. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce/yaml/__init__.py +0 -0
  138. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce_nightly.egg-info/dependency_links.txt +0 -0
  139. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce_nightly.egg-info/entry_points.txt +0 -0
  140. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce_nightly.egg-info/requires.txt +0 -0
  141. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/recce_nightly.egg-info/top_level.txt +0 -0
  142. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/setup.cfg +0 -0
  143. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/__init__.py +0 -0
  144. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/adapter/__init__.py +0 -0
  145. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/adapter/dbt_adapter/__init__.py +0 -0
  146. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -0
  147. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/adapter/dbt_adapter/test_selector.py +0 -0
  148. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/__init__.py +0 -0
  149. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/conftest.py +0 -0
  150. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_histogram.py +0 -0
  151. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_lineage.py +0 -0
  152. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_preset_checks.py +0 -0
  153. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_profile.py +0 -0
  154. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_query.py +0 -0
  155. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_row_count.py +0 -0
  156. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_schema.py +0 -0
  157. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_top_k.py +0 -0
  158. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/tasks/test_valuediff.py +0 -0
  159. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_cli.py +0 -0
  160. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_config.py +0 -0
  161. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_core.py +0 -0
  162. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_dbt.py +0 -0
  163. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_pull_request.py +0 -0
  164. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_server.py +0 -0
  165. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_state.py +0 -0
  166. {recce_nightly-1.7.0.20250604 → recce_nightly-1.7.0.20250609}/tests/test_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 1.7.0.20250604
3
+ Version: 1.7.0.20250609
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -9,6 +9,8 @@ Project-URL: Bug Tracker, https://github.com/InfuseAI/recce/issues
9
9
  Classifier: Programming Language :: Python :: 3.9
10
10
  Classifier: Programming Language :: Python :: 3.10
11
11
  Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
12
14
  Classifier: License :: OSI Approved :: Apache Software License
13
15
  Classifier: Operating System :: OS Independent
14
16
  Classifier: Development Status :: 4 - Beta
@@ -0,0 +1 @@
1
+ 1.7.0.20250609
@@ -24,7 +24,13 @@ from typing import (
24
24
  from recce.event import log_performance
25
25
  from recce.exceptions import RecceException
26
26
  from recce.util.cll import CllColumnDep, CLLPerformanceTracking, cll
27
- from recce.util.lineage import find_downstream, find_upstream
27
+ from recce.util.lineage import (
28
+ build_dependency_maps,
29
+ filter_column_lineage,
30
+ find_column_dependencies,
31
+ find_downstream,
32
+ find_upstream,
33
+ )
28
34
 
29
35
  from ...tasks.profile import ProfileTask
30
36
  from ...util.breaking import BreakingPerformanceTracking, parse_change_category
@@ -909,6 +915,17 @@ class DbtAdapter(BaseAdapter):
909
915
  diff=diff,
910
916
  )
911
917
 
918
+ def get_cll(self, node_id: str, column: Optional[str]) -> CllData:
919
+ cll = self.get_cll_by_node_id(node_id)
920
+ if column:
921
+ parent_map, child_map = build_dependency_maps(cll)
922
+ target_node = node_id
923
+ target_column = f"{node_id}_{column}"
924
+ upstream, downstream = find_column_dependencies(target_node, target_column, parent_map, child_map)
925
+ relevant_columns = {target_column}
926
+ relevant_columns.update(upstream, downstream)
927
+ return filter_column_lineage(cll, relevant_columns)
928
+
912
929
  def get_cll_by_node_id(self, node_id: str, base: Optional[bool] = False) -> CllData:
913
930
  cll_tracker = CLLPerformanceTracking()
914
931
  cll_tracker.start_column_lineage()
@@ -926,7 +943,7 @@ class DbtAdapter(BaseAdapter):
926
943
  for node_id in cll_node_ids:
927
944
  if node_id not in node_manifest:
928
945
  continue
929
- nodes[node_id] = self.get_cll_cached(node_id, base=base)
946
+ nodes[node_id] = self.get_cll_cached(node_id, base=base).copy(deep=True)
930
947
 
931
948
  cll_tracker.end_column_lineage()
932
949
  cll_tracker.set_total_nodes(len(nodes))
@@ -184,6 +184,132 @@ def version():
184
184
  print(__version__)
185
185
 
186
186
 
187
+ @cli.command(cls=TrackCommand)
188
+ @add_options(dbt_related_options)
189
+ @add_options(recce_dbt_artifact_dir_options)
190
+ def debug(**kwargs):
191
+ """
192
+ Diagnose and verify Recce setup for the development and the base environments
193
+ """
194
+
195
+ from rich.console import Console
196
+
197
+ from recce.adapter.dbt_adapter import DbtAdapter
198
+ from recce.core import load_context
199
+
200
+ console = Console()
201
+
202
+ target_path = Path(kwargs.get("target_path", "target"))
203
+ target_base_path = Path(kwargs.get("target_base_path", "target-base"))
204
+
205
+ curr_dir_is_ready = True
206
+ curr_manifest_is_ready = True
207
+ curr_catalog_is_ready = True
208
+ base_dir_is_ready = True
209
+ base_manifest_is_ready = True
210
+ base_catalog_is_ready = True
211
+ conn_is_ready = True
212
+
213
+ console.rule("Development Environment", style="orange3")
214
+ if not target_path.is_dir():
215
+ console.print(f"[[red]MISS[/red]] Directory does not exist: {target_path}")
216
+ curr_dir_is_ready = False
217
+ else:
218
+ console.print(f"[[green]OK[/green]] Directory exists: {target_path}")
219
+
220
+ manifest_path = target_path / "manifest.json"
221
+ if not manifest_path.is_file():
222
+ console.print(f"[[red]MISS[/red]] Manifest JSON file does not exist: {manifest_path}")
223
+ curr_manifest_is_ready = False
224
+ else:
225
+ console.print(f"[[green]OK[/green]] Manifest JSON file exists : {manifest_path}")
226
+
227
+ catalog_path = target_path / "catalog.json"
228
+ if not catalog_path.is_file():
229
+ console.print(f"[[red]MISS[/red]] Catalog JSON file does not exist: {catalog_path}")
230
+ curr_catalog_is_ready = False
231
+ else:
232
+ console.print(f"[[green]OK[/green]] Catalog JSON file exists: {catalog_path}")
233
+
234
+ console.rule("Base Environment", style="orange3")
235
+ if not target_base_path.is_dir():
236
+ console.print(f"[[red]MISS[/red]] Directory does not exist: {target_base_path}")
237
+ base_dir_is_ready = False
238
+ else:
239
+ console.print(f"[[green]OK[/green]] Directory exists: {target_base_path}")
240
+
241
+ manifest_path = target_base_path / "manifest.json"
242
+ if not manifest_path.is_file():
243
+ console.print(f"[[red]MISS[/red]] Manifest JSON file does not exist: {manifest_path}")
244
+ base_manifest_is_ready = False
245
+ else:
246
+ console.print(f"[[green]OK[/green]] Manifest JSON file exists : {manifest_path}")
247
+
248
+ catalog_path = target_base_path / "catalog.json"
249
+ if not catalog_path.is_file():
250
+ console.print(f"[[red]MISS[/red]] Catalog JSON file does not exist: {catalog_path}")
251
+ base_catalog_is_ready = False
252
+ else:
253
+ console.print(f"[[green]OK[/green]] Catalog JSON file exists: {catalog_path}")
254
+
255
+ console.rule("Warehouse Connection", style="orange3")
256
+ try:
257
+ context_kwargs = {**kwargs, "target_base_path": kwargs.get("target_base_path", "target-base")}
258
+ ctx = load_context(**context_kwargs)
259
+ dbt_adapter: DbtAdapter = ctx.adapter
260
+ sql = dbt_adapter.generate_sql("select 1", False)
261
+ dbt_adapter.execute(sql, fetch=True, auto_begin=True)
262
+ console.print("[[green]OK[/green]] Connection test")
263
+ except Exception:
264
+ conn_is_ready = False
265
+ console.print("[[red]FAIL[/red]] Connection test")
266
+
267
+ console.rule("Result", style="orange3")
268
+ if (
269
+ curr_manifest_is_ready
270
+ and curr_catalog_is_ready
271
+ and base_manifest_is_ready
272
+ and base_catalog_is_ready
273
+ and conn_is_ready
274
+ ):
275
+ console.print("[[green]OK[/green]] You're ready for [bold]Recce[/bold]! Launch it with `recce server`")
276
+ elif curr_manifest_is_ready and curr_catalog_is_ready and conn_is_ready:
277
+ console.print(
278
+ "[[orange3]OK[/orange3]] You're ready for the [bold]single environment mode[/bold]! Launch Recce with `recce server`"
279
+ )
280
+
281
+ if not curr_dir_is_ready:
282
+ console.print(
283
+ "[[orange3]TIP[/orange3]] Run dbt or overwrite the default directory of the development environment with `--target-path`"
284
+ )
285
+ else:
286
+ if not curr_manifest_is_ready:
287
+ console.print(
288
+ "[[orange3]TIP[/orange3]] `dbt run` to generate the manifest JSON file for the development environment"
289
+ )
290
+ if not curr_catalog_is_ready:
291
+ console.print(
292
+ "[[orange3]TIP[/orange3]] `dbt docs generate` to generate the catalog JSON file for the development environment"
293
+ )
294
+
295
+ if not base_dir_is_ready:
296
+ console.print(
297
+ "[[orange3]TIP[/orange3]] Run dbt with `--target-path target-base` or overwrite the default directory of the base environment with `--target-base-path`"
298
+ )
299
+ else:
300
+ if not base_manifest_is_ready:
301
+ console.print(
302
+ "[[orange3]TIP[/orange3]] `dbt run --target-path target-base` to generate the manifest JSON file for the base environment"
303
+ )
304
+ if not base_catalog_is_ready:
305
+ console.print(
306
+ "[[orange3]TIP[/orange3]] `dbt docs generate --target-path target-base` to generate the catalog JSON file for the base environment"
307
+ )
308
+
309
+ if not conn_is_ready:
310
+ console.print("[[orange3]TIP[/orange3]] Run `dbt debug` to check the connection")
311
+
312
+
187
313
  @cli.command(hidden=True, cls=TrackCommand)
188
314
  @click.option("--sql", help="Sql template to query", required=True)
189
315
  @click.option("--base", is_flag=True, help="Run the query on the base environment")
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/1b121dc4d36aeb4d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/951e2e0eea2d4a5b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-741f2f465598ee9c.js"/><script src="/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js" async=""></script><script src="/_next/static/chunks/700-3b65fc3666820d00.js" async=""></script><script src="/_next/static/chunks/main-app-0225a2255968e566.js" async=""></script><script src="/_next/static/chunks/9746af58-d74bef4d03eea6ab.js" async=""></script><script src="/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js" async=""></script><script src="/_next/static/chunks/a30376cd-ac45432855afb688.js" async=""></script><script src="/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js" async=""></script><script src="/_next/static/chunks/3a92ee20-3b5d922d4157af5e.js" async=""></script><script src="/_next/static/chunks/3998a672-eaad84bdd88cc73e.js" async=""></script><script src="/_next/static/chunks/e24bf851-0f8cbc99656833e7.js" async=""></script><script src="/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js" async=""></script><script src="/_next/static/chunks/402-8636abe5d238aff6.js" async=""></script><script src="/_next/static/chunks/350-30608a95db2634b6.js" async=""></script><script src="/_next/static/chunks/711-e33b196232addaf6.js" async=""></script><script src="/_next/static/chunks/app/layout-85508f342aee398d.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><style data-emotion="css-global dh58eu">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-brand-100:#fd683e;--chakra-colors-brand-200:#fd683e;--chakra-colors-brand-300:#fd683e;--chakra-colors-brand-400:#fd683e;--chakra-colors-brand-500:#fd683e;--chakra-colors-brand-600:#fd683e;--chakra-colors-brand-700:#fd683e;--chakra-colors-brand-800:#fd683e;--chakra-colors-brand-900:#fd683e;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-3xs:0.45rem;--chakra-fontSizes-2xs:0.625rem;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;--chakra-breakpoints-base:0em;--chakra-breakpoints-sm:30em;--chakra-breakpoints-md:48em;--chakra-breakpoints-lg:62em;--chakra-breakpoints-xl:80em;--chakra-breakpoints-2xl:96em;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-inverse-text:var(--chakra-colors-white);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-600);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-inverse-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-400);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);}</style><style data-emotion="css-global fubdgu">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;margin:0;font-feature-settings:"kern";}:where(*, *::before, *::after){border-width:0;border-style:solid;box-sizing:border-box;word-wrap:break-word;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}:where(pre, code, kbd,samp){font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}:where(b, strong){font-weight:bold;}small{font-size:80%;}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}:where(button, input, optgroup, select, textarea){font-family:inherit;font-size:100%;line-height:1.15;margin:0;}:where(button, input){overflow:visible;}:where(button, select){text-transform:none;}:where(
2
+ button::-moz-focus-inner,
3
+ [type="button"]::-moz-focus-inner,
4
+ [type="reset"]::-moz-focus-inner,
5
+ [type="submit"]::-moz-focus-inner
6
+ ){border-style:none;padding:0;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}:where([type="checkbox"], [type="radio"]){box-sizing:border-box;padding:0;}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none!important;}input[type="number"]{-moz-appearance:textfield;}input[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}input[type="search"]::-webkit-search-decoration{-webkit-appearance:none!important;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none!important;}:where(
7
+ blockquote,
8
+ dl,
9
+ dd,
10
+ h1,
11
+ h2,
12
+ h3,
13
+ h4,
14
+ h5,
15
+ h6,
16
+ hr,
17
+ figure,
18
+ p,
19
+ pre
20
+ ){margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}:where(ol, ul){margin:0;padding:0;}textarea{resize:vertical;}:where(button, [role="button"]){cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}:where(h1, h2, h3, h4, h5, h6){font-size:inherit;font-weight:inherit;}:where(button, input, optgroup, select, textarea){padding:0;line-height:inherit;color:inherit;}:where(img, svg, video, canvas, audio, iframe, embed, object){display:block;}:where(img, video){max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]):not(
21
+ [data-focus-visible-disabled]
22
+ ){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root,:host{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root,:host{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root,:host{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root,:host{--chakra-vh:100dvh;}}</style><style data-emotion="css-global 1cgn62j">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-chakra-body-text);background:var(--chakra-colors-chakra-body-bg);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);}</style><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><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-741f2f465598ee9c.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/1b121dc4d36aeb4d.css\",\"style\"]\n2:HL[\"/_next/static/css/951e2e0eea2d4a5b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[37194,[],\"\"]\n5:I[79137,[],\"\"]\n6:I[63846,[],\"\"]\n7:I[84046,[\"509\",\"static/chunks/9746af58-d74bef4d03eea6ab.js\",\"989\",\"static/chunks/47d8844f-79a1b53c66a7d7ec.js\",\"147\",\"static/chunks/a30376cd-ac45432855afb688.js\",\"495\",\"static/chunks/6dc81886-c94b9b91bc2c3caf.js\",\"376\",\"static/chunks/3a92ee20-3b5d922d4157af5e.js\",\"678\",\"static/chunks/3998a672-eaad84bdd88cc73e.js\",\"266\",\"static/chunks/e24bf851-0f8cbc99656833e7.js\",\"517\",\"static/chunks/c1ceaa8b-a1e442154d23515e.js\",\"402\",\"static/chunks/402-8636abe5d238aff6.js\",\"350\",\"static/chunks/350-30608a95db2634b6.js\",\"711\",\"static/chunks/711-e33b196232addaf6.js\",\"185\",\"static/chunks/app/layout-85508f342aee398d.js\"],\"default\"]\nd:I[67160,[],\"\"]\n8:{\"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\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"UagUixLmMCnvbUQpJdutM\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"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,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1b121dc4d36aeb4d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/951e2e0eea2d4a5b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"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\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"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\"}]]\n4:null\n"])</script></body></html>