datajunction 0.0.249__tar.gz → 0.0.251__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 datajunction might be problematic. Click here for more details.

Files changed (184) hide show
  1. {datajunction-0.0.249 → datajunction-0.0.251}/PKG-INFO +1 -1
  2. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/__about__.py +1 -1
  3. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/deployment.py +6 -0
  4. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/skills/datajunction-semantic-model/SKILL.md +1 -0
  5. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_deploy.py +47 -0
  6. {datajunction-0.0.249 → datajunction-0.0.251}/.coveragerc +0 -0
  7. {datajunction-0.0.249 → datajunction-0.0.251}/.gitignore +0 -0
  8. {datajunction-0.0.249 → datajunction-0.0.251}/.pre-commit-config.yaml +0 -0
  9. {datajunction-0.0.249 → datajunction-0.0.251}/LICENSE.txt +0 -0
  10. {datajunction-0.0.249 → datajunction-0.0.251}/Makefile +0 -0
  11. {datajunction-0.0.249 → datajunction-0.0.251}/README.md +0 -0
  12. {datajunction-0.0.249 → datajunction-0.0.251}/claude_desktop_config.example.json +0 -0
  13. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/__init__.py +0 -0
  14. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/_base.py +0 -0
  15. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/_internal.py +0 -0
  16. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/admin.py +0 -0
  17. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/builder.py +0 -0
  18. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/cli.py +0 -0
  19. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/client.py +0 -0
  20. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/compile.py +0 -0
  21. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/exceptions.py +0 -0
  22. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/mcp/__init__.py +0 -0
  23. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/mcp/cli.py +0 -0
  24. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/mcp/config.py +0 -0
  25. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/models.py +0 -0
  26. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/nodes.py +0 -0
  27. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/rendering.py +0 -0
  28. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/init_system_nodes.py +0 -0
  29. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/date.yaml +0 -0
  30. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/deployment.yaml +0 -0
  31. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/dimension_link.yaml +0 -0
  32. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/distinct_node_authors.yaml +0 -0
  33. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/distinct_node_editors.yaml +0 -0
  34. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/dj.yaml +0 -0
  35. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/is_active.yaml +0 -0
  36. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/materialization.yaml +0 -0
  37. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/median_deployment_duration_seconds.yaml +0 -0
  38. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/median_dim_links_per_node.yaml +0 -0
  39. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/median_dimension_indegree.yaml +0 -0
  40. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/median_downstream_count.yaml +0 -0
  41. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/median_revisions_per_node.yaml +0 -0
  42. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/median_upstream_count.yaml +0 -0
  43. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/namespace.yaml +0 -0
  44. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/node_revision.yaml +0 -0
  45. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/node_type.yaml +0 -0
  46. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/nodes.yaml +0 -0
  47. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_branches.yaml +0 -0
  48. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_deployments.yaml +0 -0
  49. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_materializations.yaml +0 -0
  50. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_namespaces.yaml +0 -0
  51. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_nodes.yaml +0 -0
  52. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_orphan_nodes.yaml +0 -0
  53. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/number_of_unused_dimensions.yaml +0 -0
  54. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/repo.yaml +0 -0
  55. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/seed/nodes/user.yaml +0 -0
  56. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/skills/datajunction/SKILL.md +0 -0
  57. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/skills/datajunction-api/SKILL.md +0 -0
  58. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/skills/datajunction-query/SKILL.md +0 -0
  59. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/skills/datajunction-repo/SKILL.md +0 -0
  60. {datajunction-0.0.249 → datajunction-0.0.251}/datajunction/tags.py +0 -0
  61. {datajunction-0.0.249 → datajunction-0.0.251}/pyproject.toml +0 -0
  62. {datajunction-0.0.249 → datajunction-0.0.251}/setup.cfg +0 -0
  63. {datajunction-0.0.249 → datajunction-0.0.251}/tests/__init__.py +0 -0
  64. {datajunction-0.0.249 → datajunction-0.0.251}/tests/conftest.py +0 -0
  65. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/dj.yaml +0 -0
  66. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/roads/companies.yaml +0 -0
  67. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/roads/companies_dim.yaml +0 -0
  68. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/roads/contractor.yaml +0 -0
  69. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/roads/contractors.yaml +0 -0
  70. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/roads/us_state.yaml +0 -0
  71. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/deploy0/roads/us_states.yaml +0 -0
  72. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/dj.yaml +0 -0
  73. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/avg_length_of_employment.metric.yaml +0 -0
  74. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/avg_repair_price.metric.yaml +0 -0
  75. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/avg_time_to_dispatch.metric.yaml +0 -0
  76. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/contractor.dimension.yaml +0 -0
  77. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/contractors.source.yaml +0 -0
  78. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/date.source.yaml +0 -0
  79. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/date_dim.dimension.yaml +0 -0
  80. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/dispatcher.dimension.yaml +0 -0
  81. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/dispatchers.source.yaml +0 -0
  82. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/hard_hat.dimension.yaml +0 -0
  83. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/hard_hat_state.source.yaml +0 -0
  84. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/hard_hats.source.yaml +0 -0
  85. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/local_hard_hats.dimension.yaml +0 -0
  86. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/municipality.source.yaml +0 -0
  87. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/municipality_dim.dimension.yaml +0 -0
  88. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/municipality_municipality_type.source.yaml +0 -0
  89. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/municipality_type.source.yaml +0 -0
  90. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/national_level_agg.transform.yaml +0 -0
  91. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/num_repair_orders.metric.yaml +0 -0
  92. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/regional_level_agg.transform.yaml +0 -0
  93. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/regional_repair_efficiency.metric.yaml +0 -0
  94. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/repair_order.dimension.yaml +0 -0
  95. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/repair_order_details.source.yaml +0 -0
  96. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/repair_order_transform.transform.yaml +0 -0
  97. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/repair_orders.source.yaml +0 -0
  98. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/repair_orders_cube.cube.yaml +0 -0
  99. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/repair_type.source.yaml +0 -0
  100. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/total_repair_cost.metric.yaml +0 -0
  101. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/total_repair_order_discounts.metric.yaml +0 -0
  102. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/us_region.source.yaml +0 -0
  103. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/us_state.dimension.yaml +0 -0
  104. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project1/roads/us_states.source.yaml +0 -0
  105. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project10/dj.yaml +0 -0
  106. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/avg_length_of_employment.metric.yaml +0 -0
  107. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/avg_repair_price.metric.yaml +0 -0
  108. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/avg_time_to_dispatch.metric.yaml +0 -0
  109. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/contractor.dimension.yaml +0 -0
  110. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/contractors.source.yaml +0 -0
  111. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/date.source.yaml +0 -0
  112. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/date_dim.dimension.yaml +0 -0
  113. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/dispatcher.dimension.yaml +0 -0
  114. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/dispatchers.source.yaml +0 -0
  115. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/dj.yaml +0 -0
  116. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/hard_hat.dimension.yaml +0 -0
  117. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/hard_hat_state.source.yaml +0 -0
  118. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/hard_hats.source.yaml +0 -0
  119. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/local_hard_hats.dimension.yaml +0 -0
  120. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/municipality.source.yaml +0 -0
  121. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/municipality_dim.dimension.yaml +0 -0
  122. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/municipality_municipality_type.source.yaml +0 -0
  123. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/municipality_type.source.yaml +0 -0
  124. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/national_level_agg.transform.yaml +0 -0
  125. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/num_repair_orders.metric.yaml +0 -0
  126. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/regional_level_agg.transform.yaml +0 -0
  127. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/regional_repair_efficiency.metric.yaml +0 -0
  128. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/repair_order.dimension.yaml +0 -0
  129. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/repair_order_details.source.yaml +0 -0
  130. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/repair_order_transform.transform.yaml +0 -0
  131. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/repair_orders.source.yaml +0 -0
  132. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/repair_orders_cube.cube.yaml +0 -0
  133. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/repair_type.source.yaml +0 -0
  134. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/total_repair_cost.metric.yaml +0 -0
  135. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/total_repair_order_discounts.metric.yaml +0 -0
  136. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/us_region.source.yaml +0 -0
  137. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/us_state.dimension.yaml +0 -0
  138. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project11/us_states.source.yaml +0 -0
  139. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/dj.yaml +0 -0
  140. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/roads/companies.source.yaml +0 -0
  141. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/roads/companies_dim.dimension.yaml +0 -0
  142. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/roads/contractor.dimension.yaml +0 -0
  143. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/roads/contractors.source.yaml +0 -0
  144. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/roads/us_state.dimension.yaml +0 -0
  145. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project12/roads/us_states.source.yaml +0 -0
  146. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project2/dj.yaml +0 -0
  147. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project2/some_node.source.yaml +0 -0
  148. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project3/dj.yaml +0 -0
  149. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project3/some_node.yaml +0 -0
  150. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project4/dj.yaml +0 -0
  151. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project4/very/very/deeply/nested/namespace/some_node.source.yaml +0 -0
  152. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project5/dj.yaml +0 -0
  153. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project5/some_node.a.b.c.source.yaml +0 -0
  154. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project6/dj.yaml +0 -0
  155. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project6/roads/contractor.dimension.yaml +0 -0
  156. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project6/roads/contractors.source.yaml +0 -0
  157. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project7/dj.yaml +0 -0
  158. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project7/roads/contractor.dimension.yaml +0 -0
  159. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project7/roads/contractors.source.yaml +0 -0
  160. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project8/dj.yaml +0 -0
  161. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/dj.yaml +0 -0
  162. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/roads/companies.source.yaml +0 -0
  163. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/roads/companies_dim.dimension.yaml +0 -0
  164. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/roads/contractor.dimension.yaml +0 -0
  165. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/roads/contractors.source.yaml +0 -0
  166. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/roads/us_state.dimension.yaml +0 -0
  167. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples/project9/roads/us_states.source.yaml +0 -0
  168. {datajunction-0.0.249 → datajunction-0.0.251}/tests/examples.py +0 -0
  169. {datajunction-0.0.249 → datajunction-0.0.251}/tests/mcp/README.md +0 -0
  170. {datajunction-0.0.249 → datajunction-0.0.251}/tests/mcp/__init__.py +0 -0
  171. {datajunction-0.0.249 → datajunction-0.0.251}/tests/mcp/test_cli.py +0 -0
  172. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test__internal.py +0 -0
  173. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_admin.py +0 -0
  174. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_base.py +0 -0
  175. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_builder.py +0 -0
  176. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_cli.py +0 -0
  177. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_client.py +0 -0
  178. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_compile.py +0 -0
  179. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_generated_client.py +0 -0
  180. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_integration.py +0 -0
  181. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_models.py +0 -0
  182. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_plugin_mirror.py +0 -0
  183. {datajunction-0.0.249 → datajunction-0.0.251}/tests/test_skills.py +0 -0
  184. {datajunction-0.0.249 → datajunction-0.0.251}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: datajunction
3
- Version: 0.0.249
3
+ Version: 0.0.251
4
4
  Summary: DataJunction client library for connecting to a DataJunction server
5
5
  Project-URL: repository, https://github.com/DataJunction/dj
6
6
  Author-email: DataJunction Authors <yian.shang@gmail.com>
@@ -2,4 +2,4 @@
2
2
  Version for Hatch
3
3
  """
4
4
 
5
- __version__ = "0.0.249"
5
+ __version__ = "0.0.251"
@@ -593,6 +593,12 @@ class DeploymentService:
593
593
  if "managed_tag_types" in project_metadata:
594
594
  deployment_spec["managed_tag_types"] = project_metadata["managed_tag_types"]
595
595
 
596
+ if "checks" in project_metadata:
597
+ deployment_spec["checks"] = project_metadata["checks"]
598
+
599
+ if "rulesets" in project_metadata:
600
+ deployment_spec["rulesets"] = project_metadata["rulesets"]
601
+
596
602
  # Add deployment source if available from env vars
597
603
  source = self._build_deployment_source(cwd=base_dir)
598
604
  if source: # pragma: no branch
@@ -297,6 +297,7 @@ Same shape for MoM (`month_code`), QoQ (`quarter_code`), YoY (`year`).
297
297
  | `direction` | ❌ Optional | `higher_is_better` / `lower_is_better` / `neutral` | Indicates performance direction |
298
298
  | `unit` | ❌ Optional | `dollar` / `unitless` / **⚠️ NOT `count`** | Server rejects `count` — use `unitless` |
299
299
  | `mode` | ❌ Optional | `draft` / `published` | Default: `published` |
300
+ | `fixed_grain` | ❌ Optional | List of dimension names | Grain the aggregate is computed at; omit for query grain, `[]` for global |
300
301
  | `required_dimensions` | ❌ Optional | List of dimension names | For time-based / windowed metrics |
301
302
  | `owners` | ❌ Optional but strongly recommended | List of email addresses | Prefer team emails |
302
303
 
@@ -185,6 +185,53 @@ def test_reconstruct_deployment_spec_forwards_managed_tag_types(tmp_path):
185
185
  assert spec["managed_tag_types"] == ["domain"]
186
186
 
187
187
 
188
+ def test_reconstruct_deployment_spec_forwards_checks_and_rulesets(tmp_path):
189
+ """`checks:` and `rulesets:` in dj.yaml reach the deployment payload.
190
+
191
+ Same defect as custom_metadata_schemas: the payload names its keys one by
192
+ one, so a manifest section nobody named is read and dropped. Dropped here
193
+ it fails silently -- the deploy succeeds having evaluated nothing.
194
+ """
195
+ (tmp_path / "dj.yaml").write_text(
196
+ "namespace: ns\n"
197
+ "checks:\n"
198
+ " - name: demo.described\n"
199
+ " description: Every node has a description.\n"
200
+ " condition: \"node.description != ''\"\n"
201
+ " gate: warn\n"
202
+ "rulesets:\n"
203
+ " - name: baseline\n"
204
+ " checks: [demo.described]\n",
205
+ )
206
+ (tmp_path / "revenue.yaml").write_text(
207
+ "name: ns.revenue\nnode_type: metric\nquery: SELECT SUM(amount) FROM ns.fct\n",
208
+ )
209
+
210
+ svc = DeploymentService(MagicMock())
211
+ spec, _ = svc._reconstruct_deployment_spec(tmp_path)
212
+
213
+ assert [check["name"] for check in spec["checks"]] == ["demo.described"]
214
+ assert spec["rulesets"] == [{"name": "baseline", "checks": ["demo.described"]}]
215
+
216
+
217
+ def test_reconstruct_deployment_spec_omits_absent_checks(tmp_path):
218
+ """A manifest that declares no checks must not send the key.
219
+
220
+ Absent leaves the namespace's governance alone; [] would say this manifest
221
+ manages checks and declares none.
222
+ """
223
+ (tmp_path / "dj.yaml").write_text("namespace: ns\n")
224
+ (tmp_path / "revenue.yaml").write_text(
225
+ "name: ns.revenue\nnode_type: metric\nquery: SELECT SUM(amount) FROM ns.fct\n",
226
+ )
227
+
228
+ svc = DeploymentService(MagicMock())
229
+ spec, _ = svc._reconstruct_deployment_spec(tmp_path)
230
+
231
+ assert "checks" not in spec
232
+ assert "rulesets" not in spec
233
+
234
+
188
235
  def test_reconstruct_deployment_spec_omits_absent_managed_tag_types(tmp_path):
189
236
  """A manifest with no claims must not send the key: [] would release them."""
190
237
  (tmp_path / "dj.yaml").write_text("namespace: ns\n")
File without changes
File without changes
File without changes
File without changes