recce-nightly 1.5.0.20250527__tar.gz → 1.6.0.20250529__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 (162) hide show
  1. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/PKG-INFO +1 -1
  2. recce_nightly-1.6.0.20250529/recce/VERSION +1 -0
  3. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/adapter/dbt_adapter/__init__.py +112 -91
  4. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/404.html +2 -2
  5. recce_nightly-1.6.0.20250529/recce/data/_next/static/chunks/711-5ac2c87eb5073191.js +1 -0
  6. recce_nightly-1.6.0.20250529/recce/data/_next/static/chunks/app/layout-c76e6ca2ce9857e9.js +1 -0
  7. recce_nightly-1.6.0.20250529/recce/data/_next/static/chunks/app/page-f0b9d7985eaf7eed.js +1 -0
  8. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/index.html +2 -2
  9. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/index.txt +3 -3
  10. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/models/types.py +47 -1
  11. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/server.py +4 -9
  12. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/cll.py +110 -90
  13. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce_nightly.egg-info/PKG-INFO +1 -1
  14. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce_nightly.egg-info/SOURCES.txt +5 -5
  15. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/adapter/dbt_adapter/dbt_test_helper.py +1 -2
  16. recce_nightly-1.6.0.20250529/tests/adapter/dbt_adapter/test_dbt_cll.py +186 -0
  17. recce_nightly-1.5.0.20250527/recce/VERSION +0 -1
  18. recce_nightly-1.5.0.20250527/recce/data/_next/static/chunks/711-9f4b13e082dc2f43.js +0 -1
  19. recce_nightly-1.5.0.20250527/recce/data/_next/static/chunks/app/layout-84447815782d7e41.js +0 -1
  20. recce_nightly-1.5.0.20250527/recce/data/_next/static/chunks/app/page-183db1bcb15b328f.js +0 -1
  21. recce_nightly-1.5.0.20250527/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -109
  22. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/LICENSE +0 -0
  23. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/README.md +0 -0
  24. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/pyproject.toml +0 -0
  25. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/__init__.py +0 -0
  26. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/adapter/__init__.py +0 -0
  27. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/adapter/base.py +0 -0
  28. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
  29. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/adapter/sqlmesh_adapter.py +0 -0
  30. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/apis/__init__.py +0 -0
  31. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/apis/check_api.py +0 -0
  32. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/apis/check_func.py +0 -0
  33. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/apis/run_api.py +0 -0
  34. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/apis/run_func.py +0 -0
  35. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/artifact.py +0 -0
  36. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/cli.py +0 -0
  37. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/config.py +0 -0
  38. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/core.py +0 -0
  39. {recce_nightly-1.5.0.20250527/recce/data/_next/static/_i7vGe6giBb07tZ0Ml9uG → recce_nightly-1.6.0.20250529/recce/data/_next/static/1rwJEkX_z2KfSDpX3cGQ1}/_buildManifest.js +0 -0
  40. {recce_nightly-1.5.0.20250527/recce/data/_next/static/_i7vGe6giBb07tZ0Ml9uG → recce_nightly-1.6.0.20250529/recce/data/_next/static/1rwJEkX_z2KfSDpX3cGQ1}/_ssgManifest.js +0 -0
  41. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js +0 -0
  42. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js +0 -0
  43. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/316-9e0164c48e40d69b.js +0 -0
  44. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/350-30608a95db2634b6.js +0 -0
  45. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +0 -0
  46. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js +0 -0
  47. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/3a92ee20-3b5d922d4157af5e.js +0 -0
  48. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js +0 -0
  49. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js +0 -0
  50. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +0 -0
  51. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/6ef81909-694dc38134099299.js +0 -0
  52. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/700-3b65fc3666820d00.js +0 -0
  53. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js +0 -0
  54. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js +0 -0
  55. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/8d700b6a.ed11a130057c7a47.js +0 -0
  56. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/963-7cb453d3f159e7cc.js +0 -0
  57. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +0 -0
  58. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/a30376cd-ac45432855afb688.js +0 -0
  59. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +0 -0
  60. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js +0 -0
  61. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +0 -0
  62. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js +0 -0
  63. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/cd9f8d63-e020f408095ed77c.js +0 -0
  64. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +0 -0
  65. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +0 -0
  66. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +0 -0
  67. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -0
  68. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +0 -0
  69. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/main-app-0225a2255968e566.js +0 -0
  70. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +0 -0
  71. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +0 -0
  72. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  73. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/chunks/webpack-8442f6926a7a34ce.js +0 -0
  74. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/css/17a96168e3a9db13.css +0 -0
  75. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/css/1b121dc4d36aeb4d.css +0 -0
  76. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/css/6d6961e0422ac782.css +0 -0
  77. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -0
  78. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  79. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff +0 -0
  80. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff +0 -0
  81. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  82. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  83. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-latin-800-normal.97e20d5e.woff +0 -0
  84. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  85. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff +0 -0
  86. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff +0 -0
  87. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  88. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/_next/static/media/reload-image.79aabb7d.svg +0 -0
  89. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/favicon.ico +0 -0
  90. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/imgs/feedback/thumbs-down.png +0 -0
  91. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/imgs/feedback/thumbs-up.png +0 -0
  92. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/imgs/reload-image.svg +0 -0
  93. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/data/logo/recce-logo-white.png +0 -0
  94. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/diff.py +0 -0
  95. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/event/CONFIG +0 -0
  96. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/event/SENTRY_DNS +0 -0
  97. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/event/__init__.py +0 -0
  98. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/event/collector.py +0 -0
  99. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/event/track.py +0 -0
  100. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/exceptions.py +0 -0
  101. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/git.py +0 -0
  102. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/github.py +0 -0
  103. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/models/__init__.py +0 -0
  104. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/models/check.py +0 -0
  105. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/models/run.py +0 -0
  106. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/pull_request.py +0 -0
  107. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/run.py +0 -0
  108. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/state.py +0 -0
  109. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/summary.py +0 -0
  110. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/__init__.py +0 -0
  111. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/core.py +0 -0
  112. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/dataframe.py +0 -0
  113. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/histogram.py +0 -0
  114. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/lineage.py +0 -0
  115. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/profile.py +0 -0
  116. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/query.py +0 -0
  117. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/rowcount.py +0 -0
  118. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/schema.py +0 -0
  119. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/top_k.py +0 -0
  120. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/tasks/valuediff.py +0 -0
  121. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/__init__.py +0 -0
  122. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/api_token.py +0 -0
  123. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/breaking.py +0 -0
  124. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/cache.py +0 -0
  125. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/io.py +0 -0
  126. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/lineage.py +0 -0
  127. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/logger.py +0 -0
  128. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/pydantic_model.py +0 -0
  129. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/recce_cloud.py +0 -0
  130. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/util/singleton.py +0 -0
  131. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce/yaml/__init__.py +0 -0
  132. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce_nightly.egg-info/dependency_links.txt +0 -0
  133. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce_nightly.egg-info/entry_points.txt +0 -0
  134. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce_nightly.egg-info/requires.txt +0 -0
  135. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/recce_nightly.egg-info/top_level.txt +0 -0
  136. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/setup.cfg +0 -0
  137. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/setup.py +0 -0
  138. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/__init__.py +0 -0
  139. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/adapter/__init__.py +0 -0
  140. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/adapter/dbt_adapter/__init__.py +0 -0
  141. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/adapter/dbt_adapter/conftest.py +0 -0
  142. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -0
  143. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/adapter/dbt_adapter/test_selector.py +0 -0
  144. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/__init__.py +0 -0
  145. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/conftest.py +0 -0
  146. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_histogram.py +0 -0
  147. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_lineage.py +0 -0
  148. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_preset_checks.py +0 -0
  149. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_profile.py +0 -0
  150. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_query.py +0 -0
  151. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_row_count.py +0 -0
  152. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_schema.py +0 -0
  153. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_top_k.py +0 -0
  154. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/tasks/test_valuediff.py +0 -0
  155. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_cli.py +0 -0
  156. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_config.py +0 -0
  157. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_core.py +0 -0
  158. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_dbt.py +0 -0
  159. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_pull_request.py +0 -0
  160. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_server.py +0 -0
  161. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_state.py +0 -0
  162. {recce_nightly-1.5.0.20250527 → recce_nightly-1.6.0.20250529}/tests/test_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 1.5.0.20250527
3
+ Version: 1.6.0.20250529
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
+ 1.6.0.20250529
@@ -3,7 +3,6 @@ import logging
3
3
  import os
4
4
  import uuid
5
5
  from contextlib import contextmanager
6
- from copy import deepcopy
7
6
  from dataclasses import dataclass, fields
8
7
  from errno import ENOENT
9
8
  from functools import lru_cache
@@ -24,8 +23,7 @@ from typing import (
24
23
 
25
24
  from recce.event import log_performance
26
25
  from recce.exceptions import RecceException
27
- from recce.util.cll import CLLPerformanceTracking
28
- from recce.util.cll import cll_old as cll
26
+ from recce.util.cll import CllColumnDep, CLLPerformanceTracking, cll
29
27
  from recce.util.lineage import find_downstream, find_upstream
30
28
 
31
29
  from ...tasks.profile import ProfileTask
@@ -46,7 +44,15 @@ from recce.adapter.base import BaseAdapter
46
44
  from recce.state import ArtifactsRoot
47
45
 
48
46
  from ...models import RunType
49
- from ...models.types import LineageDiff, NodeChange, NodeDiff
47
+ from ...models.types import (
48
+ CllColumn,
49
+ CllData,
50
+ CllNode,
51
+ CllNodeDependsOn,
52
+ LineageDiff,
53
+ NodeChange,
54
+ NodeDiff,
55
+ )
50
56
  from ...tasks import (
51
57
  HistogramDiffTask,
52
58
  ProfileDiffTask,
@@ -903,7 +909,7 @@ class DbtAdapter(BaseAdapter):
903
909
  diff=diff,
904
910
  )
905
911
 
906
- def get_cll_by_node_id(self, node_id: str, base: Optional[bool] = False):
912
+ def get_cll_by_node_id(self, node_id: str, base: Optional[bool] = False) -> CllData:
907
913
  cll_tracker = CLLPerformanceTracking()
908
914
  cll_tracker.start_column_lineage()
909
915
 
@@ -915,7 +921,7 @@ class DbtAdapter(BaseAdapter):
915
921
  cll_node_ids = parent_ids.union(child_ids)
916
922
  cll_node_ids.add(node_id)
917
923
 
918
- node_manifest = self.get_lineage_nodes_metadata(base=base)
924
+ node_manifest = self.get_cll_nodes_from_metadata(base=base)
919
925
  nodes = {}
920
926
  for node_id in cll_node_ids:
921
927
  if node_id not in node_manifest:
@@ -927,11 +933,11 @@ class DbtAdapter(BaseAdapter):
927
933
  log_performance("column level lineage", cll_tracker.to_dict())
928
934
  cll_tracker.reset()
929
935
 
930
- return dict(nodes=nodes)
936
+ return CllData(nodes=nodes)
931
937
 
932
938
  @lru_cache(maxsize=128)
933
- def get_cll_cached(self, node_id: str, base: Optional[bool] = False):
934
- nodes = self.get_lineage_nodes_metadata(base=base)
939
+ def get_cll_cached(self, node_id: str, base: Optional[bool] = False) -> CllNode:
940
+ nodes = self.get_cll_nodes_from_metadata(base=base)
935
941
 
936
942
  manifest = self.curr_manifest if base is False else self.base_manifest
937
943
  manifest_dict = manifest.to_dict()
@@ -939,71 +945,84 @@ class DbtAdapter(BaseAdapter):
939
945
  if node_id in manifest_dict["parent_map"]:
940
946
  parent_list = manifest_dict["parent_map"][node_id]
941
947
 
942
- node = deepcopy(nodes[node_id])
948
+ node = nodes[node_id]
943
949
  self.append_column_lineage(node, parent_list, base)
944
950
  return node
945
951
 
946
- def append_column_lineage(self, node: Dict, parent_list: List, base: Optional[bool] = False):
947
- def _apply_all_columns(node, trans_type, depends_on):
948
- for col in node.get("columns", {}).values():
949
- col["transformation_type"] = trans_type
950
- col["depends_on"] = depends_on
951
-
952
- def _depend_node_to_id(column_lineage, nodes):
953
- for cl in column_lineage.values():
954
- for depend_on in cl.depends_on:
955
- if depend_on.node.startswith("__"):
956
- for n in nodes.values():
957
- if n.get("resource_type") != "source":
958
- continue
959
- # __source__table -> source.table
960
- source_table = depend_on.node.lstrip("_").replace("__", ".", 1).lower()
961
- if source_table in n.get("id"):
962
- depend_on.node = n.get("id")
963
- break
964
- else:
965
- for n in nodes.values():
966
- if n.get("name") == depend_on.node.lower():
967
- depend_on.node = n.get("id")
968
- break
952
+ def append_column_lineage(self, node: CllNode, parent_list: List, base: Optional[bool] = False):
953
+ def _apply_all_columns(node: CllNode, transformation_type):
954
+ for col in node.columns.values():
955
+ col.transformation_type = transformation_type
969
956
 
970
957
  cll_tracker = CLLPerformanceTracking()
971
- nodes = self.get_lineage_nodes_metadata(base=base)
958
+ nodes = self.get_cll_nodes_from_metadata(base=base)
972
959
  manifest = as_manifest(self.get_manifest(base))
973
- resource_type = node.get("resource_type")
960
+ resource_type = node.resource_type
974
961
  if resource_type not in {"model", "seed", "source", "snapshot"}:
975
962
  return
976
963
 
977
964
  if resource_type == "source" or resource_type == "seed":
978
- _apply_all_columns(node, "source", [])
965
+ _apply_all_columns(node, "source")
979
966
  return
980
967
 
981
- if node.get("raw_code") is None or self.is_python_model(node.get("id"), base=base):
982
- _apply_all_columns(node, "unknown", [])
968
+ if node.raw_code is None or self.is_python_model(node.id, base=base):
969
+ _apply_all_columns(node, "unknown")
983
970
  return
984
971
 
985
- # dbt <= 1.8, MetricFlow expects the time spine table to be named metricflow_time_spine
986
- if node.get("name") == "metricflow_time_spine":
987
- _apply_all_columns(node, "source", [])
972
+ if node.name == "metricflow_time_spine":
973
+ _apply_all_columns(node, "source")
988
974
  return
989
975
 
990
- if not node.get("columns", {}):
991
- # no catalog
976
+ if not node.columns:
992
977
  return
993
978
 
979
+ table_id_map = {}
980
+
994
981
  def ref_func(*args):
982
+ node_name: str = None
983
+ project_or_package: str = None
984
+
995
985
  if len(args) == 1:
996
- node = args[0]
997
- elif len(args) > 1:
998
- node = args[1]
986
+ node_name = args[0]
999
987
  else:
1000
- return None
1001
- return node
988
+ project_or_package = args[0]
989
+ node_name = args[1]
1002
990
 
1003
- def source_func(source_name, table_name):
1004
- return f"__{source_name}__{table_name}"
991
+ for key, n in nodes.items():
992
+ if n.resource_type == "source":
993
+ # For resource_type==source, you should use "source(...)"
994
+ continue
995
+ if n.name != node_name:
996
+ continue
997
+ if project_or_package is not None and n.package_name != project_or_package:
998
+ continue
999
+
1000
+ # replace id "." to "_"
1001
+ unique_id = n.id
1002
+ table_name = unique_id.replace(".", "_")
1003
+ table_id_map[table_name.lower()] = unique_id
1004
+ return table_name
1005
1005
 
1006
- raw_code = node.get("raw_code")
1006
+ raise ValueError(f"Cannot find node {node_name} in the manifest")
1007
+
1008
+ def source_func(source_name, name):
1009
+ for key, n in nodes.items():
1010
+ if n.resource_type != "source":
1011
+ continue
1012
+ if n.source_name != source_name:
1013
+ continue
1014
+ if n.name != name:
1015
+ continue
1016
+
1017
+ # replace id "." to "_"
1018
+ unique_id = n.id
1019
+ table_name = unique_id.replace(".", "_")
1020
+ table_id_map[table_name.lower()] = unique_id
1021
+ return table_name
1022
+
1023
+ raise ValueError(f"Cannot find source {source_name}.{name} in the manifest")
1024
+
1025
+ raw_code = node.raw_code
1007
1026
  jinja_context = dict(
1008
1027
  ref=ref_func,
1009
1028
  source=source_func,
@@ -1014,42 +1033,37 @@ class DbtAdapter(BaseAdapter):
1014
1033
  parent_node = nodes.get(parent_id)
1015
1034
  if parent_node is None:
1016
1035
  continue
1017
- columns = parent_node.get("columns") or {}
1018
- name = parent_node.get("name")
1019
- if parent_node.get("resource_type") == "source":
1020
- parts = parent_id.split(".")
1021
- source = parts[2]
1022
- table = parts[3]
1023
- name = f"__{source}__{table}"
1024
- schema[name] = {name: column.get("type") for name, column in columns.items()}
1036
+ columns = parent_node.columns
1037
+ table_name = parent_id.replace(".", "_")
1038
+ schema[table_name] = {name: column.type for name, column in columns.items()}
1025
1039
 
1026
1040
  try:
1027
- # provide a manifest to speedup and not pollute the manifest
1028
1041
  compiled_sql = self.generate_sql(raw_code, base=base, context=jinja_context, provided_manifest=manifest)
1029
1042
  dialect = self.adapter.type()
1030
- # find adapter type from the manifest, otherwise we use the adapter type from the adapter
1031
1043
  if self.get_manifest(base).metadata.adapter_type is not None:
1032
1044
  dialect = self.get_manifest(base).metadata.adapter_type
1033
- column_lineage = cll(compiled_sql, schema=schema, dialect=dialect)
1045
+ m2c, c2c_map = cll(compiled_sql, schema=schema, dialect=dialect)
1034
1046
  except RecceException:
1035
- # TODO: provide parsing error message if needed
1036
- _apply_all_columns(node, "unknown", [])
1047
+ _apply_all_columns(node, "unknown")
1037
1048
  cll_tracker.increment_sqlglot_error_nodes()
1038
1049
  return
1039
1050
  except Exception:
1040
- _apply_all_columns(node, "unknown", [])
1051
+ _apply_all_columns(node, "unknown")
1041
1052
  cll_tracker.increment_other_error_nodes()
1042
1053
  return
1043
1054
 
1044
- _depend_node_to_id(column_lineage, nodes)
1045
-
1046
- for name, column in node.get("columns", {}).items():
1047
- if name in column_lineage:
1048
- column["depends_on"] = column_lineage[name].depends_on
1049
- column["transformation_type"] = column_lineage[name].type
1055
+ # Add cll dependency to the node.
1056
+ depends_on = [CllColumnDep(node=table_id_map[d.node.lower()], column=d.column) for d in m2c]
1057
+ node.depends_on.columns = depends_on
1058
+ for name, column in node.columns.items():
1059
+ if name in c2c_map:
1060
+ column.depends_on = [
1061
+ CllColumnDep(node=table_id_map[d.node.lower()], column=d.column) for d in c2c_map[name].depends_on
1062
+ ]
1063
+ column.transformation_type = c2c_map[name].transformation_type
1050
1064
 
1051
1065
  @lru_cache(maxsize=2)
1052
- def get_lineage_nodes_metadata(self, base: Optional[bool] = False):
1066
+ def get_cll_nodes_from_metadata(self, base: Optional[bool] = False) -> Dict[str, CllNode]:
1053
1067
  manifest = self.curr_manifest if base is False else self.base_manifest
1054
1068
  catalog = self.curr_catalog if base is False else self.base_catalog
1055
1069
  manifest_dict = manifest.to_dict()
@@ -1062,34 +1076,41 @@ class DbtAdapter(BaseAdapter):
1062
1076
  if resource_type not in ["model", "seed", "exposure", "snapshot"]:
1063
1077
  continue
1064
1078
 
1065
- nodes[unique_id] = {
1066
- "id": node["unique_id"],
1067
- "name": node["name"],
1068
- "resource_type": node["resource_type"],
1069
- "raw_code": node["raw_code"],
1070
- }
1079
+ nodes[unique_id] = CllNode(
1080
+ id=node["unique_id"],
1081
+ name=node["name"],
1082
+ package_name=node["package_name"],
1083
+ resource_type=node["resource_type"],
1084
+ raw_code=node["raw_code"],
1085
+ depends_on=CllNodeDependsOn(
1086
+ nodes=node.get("depends_on").get("nodes", []),
1087
+ ),
1088
+ )
1071
1089
 
1072
1090
  if catalog is not None and unique_id in catalog.nodes:
1073
1091
  columns = {}
1074
1092
  for col_name, col_metadata in catalog.nodes[unique_id].columns.items():
1075
- col = dict(name=col_name, type=col_metadata.type)
1093
+ col = CllColumn(name=col_name, type=col_metadata.type)
1076
1094
  columns[col_name] = col
1077
- nodes[unique_id]["columns"] = columns
1095
+ nodes[unique_id].columns = columns
1078
1096
 
1079
1097
  for source in manifest_dict["sources"].values():
1080
1098
  unique_id = source["unique_id"]
1081
1099
 
1082
- nodes[unique_id] = {
1083
- "id": source["unique_id"],
1084
- "name": source["name"],
1085
- "resource_type": source["resource_type"],
1086
- }
1100
+ nodes[unique_id] = CllNode(
1101
+ id=source["unique_id"],
1102
+ name=source["name"],
1103
+ package_name=source["package_name"],
1104
+ resource_type=source["resource_type"],
1105
+ source_name=source["source_name"],
1106
+ )
1087
1107
 
1088
1108
  if catalog is not None and unique_id in catalog.sources:
1089
- nodes[unique_id]["columns"] = {
1090
- col_name: {"name": col_name, "type": col_metadata.type}
1091
- for col_name, col_metadata in catalog.sources[unique_id].columns.items()
1092
- }
1109
+ columns = {}
1110
+ for col_name, col_metadata in catalog.sources[unique_id].columns.items():
1111
+ col = CllColumn(name=col_name, type=col_metadata.type)
1112
+ columns[col_name] = col
1113
+ nodes[unique_id].columns = columns
1093
1114
 
1094
1115
  return nodes
1095
1116
 
@@ -1190,10 +1211,10 @@ class DbtAdapter(BaseAdapter):
1190
1211
  self.curr_manifest = load_manifest(path=refresh_file_path)
1191
1212
  self.manifest = as_manifest(self.curr_manifest)
1192
1213
  self.get_cll_cached.cache_clear()
1193
- self.get_lineage_nodes_metadata.cache_clear()
1214
+ self.get_cll_nodes_from_metadata.cache_clear()
1194
1215
  elif refresh_file_path.endswith("catalog.json"):
1195
1216
  self.curr_catalog = load_catalog(path=refresh_file_path)
1196
- self.get_lineage_nodes_metadata.cache_clear()
1217
+ self.get_cll_nodes_from_metadata.cache_clear()
1197
1218
  elif self.base_path and target_type == os.path.basename(self.base_path):
1198
1219
  if refresh_file_path.endswith("manifest.json"):
1199
1220
  self.base_manifest = load_manifest(path=refresh_file_path)
@@ -1,4 +1,4 @@
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-8442f6926a7a34ce.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/6ef81909-694dc38134099299.js" async=""></script><script src="/_next/static/chunks/316-9e0164c48e40d69b.js" async=""></script><script src="/_next/static/chunks/350-30608a95db2634b6.js" async=""></script><script src="/_next/static/chunks/711-9f4b13e082dc2f43.js" async=""></script><script src="/_next/static/chunks/app/layout-84447815782d7e41.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(
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-8442f6926a7a34ce.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/6ef81909-694dc38134099299.js" async=""></script><script src="/_next/static/chunks/316-9e0164c48e40d69b.js" async=""></script><script src="/_next/static/chunks/350-30608a95db2634b6.js" async=""></script><script src="/_next/static/chunks/711-5ac2c87eb5073191.js" async=""></script><script src="/_next/static/chunks/app/layout-c76e6ca2ce9857e9.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
2
  button::-moz-focus-inner,
3
3
  [type="button"]::-moz-focus-inner,
4
4
  [type="reset"]::-moz-focus-inner,
@@ -19,4 +19,4 @@
19
19
  pre
20
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
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-8442f6926a7a34ce.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\",\"455\",\"static/chunks/6ef81909-694dc38134099299.js\",\"316\",\"static/chunks/316-9e0164c48e40d69b.js\",\"350\",\"static/chunks/350-30608a95db2634b6.js\",\"711\",\"static/chunks/711-9f4b13e082dc2f43.js\",\"185\",\"static/chunks/app/layout-84447815782d7e41.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\":\"_i7vGe6giBb07tZ0Ml9uG\",\"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>
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-8442f6926a7a34ce.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\",\"455\",\"static/chunks/6ef81909-694dc38134099299.js\",\"316\",\"static/chunks/316-9e0164c48e40d69b.js\",\"350\",\"static/chunks/350-30608a95db2634b6.js\",\"711\",\"static/chunks/711-5ac2c87eb5073191.js\",\"185\",\"static/chunks/app/layout-c76e6ca2ce9857e9.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\":\"1rwJEkX_z2KfSDpX3cGQ1\",\"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>