serverless-data-mesh 0.2.0__tar.gz → 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/.gitignore +5 -0
  2. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/CHANGELOG.md +26 -0
  3. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/PKG-INFO +6 -3
  4. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/PYPI.md +2 -0
  5. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/README.md +86 -14
  6. serverless_data_mesh-1.0.0/VERSION +1 -0
  7. serverless_data_mesh-1.0.0/docs/metadata-driven-pipeline.md +817 -0
  8. serverless_data_mesh-1.0.0/examples/contracts/payments.mesh.pipeline.yaml +48 -0
  9. serverless_data_mesh-1.0.0/examples/medallion-e2e/README.md +181 -0
  10. serverless_data_mesh-1.0.0/examples/medallion-e2e/northstar.mesh.yaml +135 -0
  11. serverless_data_mesh-1.0.0/examples/retail-mesh/README.md +274 -0
  12. serverless_data_mesh-1.0.0/examples/retail-mesh/compile_all.py +44 -0
  13. serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/customers.mesh.pipeline.yaml +32 -0
  14. serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/inventory.mesh.pipeline.yaml +34 -0
  15. serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/orders.mesh.pipeline.yaml +58 -0
  16. serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/payments.mesh.pipeline.yaml +36 -0
  17. serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/shipping.mesh.pipeline.yaml +33 -0
  18. serverless_data_mesh-1.0.0/examples/retail-mesh/mesh-registry.yaml +63 -0
  19. serverless_data_mesh-1.0.0/examples/retail-mesh/mesh-transactions/daily-close.yaml +26 -0
  20. serverless_data_mesh-1.0.0/examples/retail-mesh/spark/orders_readers.example.py +67 -0
  21. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/README.md +34 -1
  22. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/main.tf +115 -0
  23. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/outputs.tf +28 -0
  24. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/terraform.tfvars.example +21 -0
  25. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/variables.tf +100 -0
  26. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/versions.tf +10 -0
  27. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/main.tf +20 -5
  28. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/prod/providers.tf +13 -0
  29. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/terraform.tfvars.example +4 -0
  30. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/variables.tf +18 -0
  31. serverless_data_mesh-1.0.0/infrastructure/terraform/modules/medallion-mesh/main.tf +85 -0
  32. serverless_data_mesh-1.0.0/infrastructure/terraform/modules/medallion-mesh/outputs.tf +7 -0
  33. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/pyproject.toml +6 -1
  34. serverless_data_mesh-1.0.0/src/serverless_data_mesh/cli.py +411 -0
  35. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/__init__.py +16 -0
  36. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/contract.py +255 -0
  37. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/emit.py +458 -0
  38. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/from_init.py +35 -0
  39. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/loader.py +60 -0
  40. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/medallion.py +270 -0
  41. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/medallion_emit.py +303 -0
  42. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/medallion_validate.py +54 -0
  43. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/runtime.py +137 -0
  44. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/validate.py +42 -0
  45. serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/wizard.py +269 -0
  46. serverless_data_mesh-1.0.0/src/serverless_data_mesh/scaffold/init_domain.py +25 -0
  47. serverless_data_mesh-1.0.0/src/serverless_data_mesh/templates/medallion-starter.mesh.yaml +46 -0
  48. serverless_data_mesh-1.0.0/src/serverless_data_mesh/templates/single-pipeline.mesh.yaml +34 -0
  49. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_cli_scaffold.py +4 -2
  50. serverless_data_mesh-1.0.0/tests/unit/test_compile.py +73 -0
  51. serverless_data_mesh-1.0.0/tests/unit/test_medallion.py +50 -0
  52. serverless_data_mesh-1.0.0/tests/unit/test_wizard.py +50 -0
  53. serverless_data_mesh-0.2.0/VERSION +0 -1
  54. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/orders/handler.py +0 -22
  55. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/payments/handler.py +0 -22
  56. serverless_data_mesh-0.2.0/src/serverless_data_mesh/cli.py +0 -165
  57. serverless_data_mesh-0.2.0/src/serverless_data_mesh/scaffold/init_domain.py +0 -210
  58. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/LICENSE +0 -0
  59. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/README.md +0 -0
  60. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/results/2026-06-baseline.json +0 -0
  61. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/run_benchmark.sh +0 -0
  62. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/run_cost_estimate.py +0 -0
  63. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/workloads/100k_rows.py +0 -0
  64. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/workloads/10m_rows.py +0 -0
  65. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/workloads/1m_rows.py +0 -0
  66. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/architecture.md +0 -0
  67. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/blog-the-vaquar-pattern.md +0 -0
  68. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/data-mesh-end-to-end.md +0 -0
  69. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/data-mesh-patterns.md +0 -0
  70. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/deployment.md +0 -0
  71. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/domain-contracts.md +0 -0
  72. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/getting-started.md +0 -0
  73. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/glue-connector.md +0 -0
  74. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/lambda-execution-flow.png +0 -0
  75. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/serverless-data-mesh-hero.png +0 -0
  76. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/three-account-data-mesh.png +0 -0
  77. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/vaquar-pattern-blog-hero.png +0 -0
  78. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/vaquar-pattern-e2e-journey.png +0 -0
  79. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/vaquar-pattern-invariant.png +0 -0
  80. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/why-sdm-four-phase-connectivity.png +0 -0
  81. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/why-sdm-hero-connectivity.png +0 -0
  82. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/why-sdm-trust-gap.png +0 -0
  83. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/mesh-trust-dashboard.md +0 -0
  84. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/pypi.md +0 -0
  85. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/sparkrules-connector.md +0 -0
  86. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/terraform-guide.md +0 -0
  87. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/vaquar-pattern.md +0 -0
  88. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/why-serverless-data-mesh.md +0 -0
  89. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/__init__.py +0 -0
  90. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/README.md +0 -0
  91. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/__init__.py +0 -0
  92. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/handler.py +0 -0
  93. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/io.py +0 -0
  94. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/rules_io.py +0 -0
  95. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/spark_io.py +0 -0
  96. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/workload.py +0 -0
  97. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/multi-domain-orders-payments/README.md +0 -0
  98. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/multi-domain-orders-payments/coordinator_config.yaml +0 -0
  99. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/multi-domain-orders-payments/test_atomicity.py +0 -0
  100. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/tutorials/README.md +0 -0
  101. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/tutorials/verification_gate_demo.py +0 -0
  102. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/tutorials/walkthrough.py +0 -0
  103. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/grafana/mesh-trust-dashboard.json +0 -0
  104. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/sam/README.md +0 -0
  105. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/sam/template.yaml +0 -0
  106. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/dev/main.tf +0 -0
  107. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/dev/terraform.tfvars.example +0 -0
  108. {serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod → serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion}/providers.tf +0 -0
  109. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/README.md +0 -0
  110. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/producer/main.tf +0 -0
  111. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/producer/terraform.tfvars.example +0 -0
  112. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/publisher/main.tf +0 -0
  113. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/publisher/terraform.tfvars.example +0 -0
  114. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/steward/main.tf +0 -0
  115. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/steward/terraform.tfvars.example +0 -0
  116. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/outputs.tf +0 -0
  117. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/versions.tf +0 -0
  118. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/main.tf +0 -0
  119. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/outputs.tf +0 -0
  120. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/variables.tf +0 -0
  121. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/versions.tf +0 -0
  122. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/governance/main.tf +0 -0
  123. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/governance/versions.tf +0 -0
  124. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/main.tf +0 -0
  125. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/outputs.tf +0 -0
  126. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/variables.tf +0 -0
  127. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/versions.tf +0 -0
  128. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/main.tf +0 -0
  129. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/outputs.tf +0 -0
  130. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/variables.tf +0 -0
  131. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/versions.tf +0 -0
  132. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/main.tf +0 -0
  133. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/outputs.tf +0 -0
  134. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/variables.tf +0 -0
  135. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/versions.tf +0 -0
  136. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/dashboard.tf +0 -0
  137. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/main.tf +0 -0
  138. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/outputs.tf +0 -0
  139. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/variables.tf +0 -0
  140. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/versions.tf +0 -0
  141. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/main.tf +0 -0
  142. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/outputs.tf +0 -0
  143. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/state_machine.asl.json.tpl +0 -0
  144. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/variables.tf +0 -0
  145. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/versions.tf +0 -0
  146. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/main.tf +0 -0
  147. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/outputs.tf +0 -0
  148. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/variables.tf +0 -0
  149. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/versions.tf +0 -0
  150. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/scripts/package_lambda.ps1 +0 -0
  151. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/scripts/package_lambda.sh +0 -0
  152. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/__init__.py +0 -0
  153. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/catalog/__init__.py +0 -0
  154. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/catalog/glue_connector.py +0 -0
  155. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/catalog/glue_rest.py +0 -0
  156. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/config.py +0 -0
  157. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/dashboard/__init__.py +0 -0
  158. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/dashboard/cloudwatch.py +0 -0
  159. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/dashboard/trust.py +0 -0
  160. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/exceptions.py +0 -0
  161. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/governance/__init__.py +0 -0
  162. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/governance/consumer_sla.py +0 -0
  163. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/lineage/__init__.py +0 -0
  164. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/lineage/openlineage.py +0 -0
  165. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/local/__init__.py +0 -0
  166. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/local/runtime.py +0 -0
  167. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/metrics/__init__.py +0 -0
  168. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/metrics/mesh_trust.py +0 -0
  169. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/__init__.py +0 -0
  170. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/canary.py +0 -0
  171. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/coordinator.py +0 -0
  172. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/durable_steps.py +0 -0
  173. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/reprocess.py +0 -0
  174. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/state.py +0 -0
  175. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/py.typed +0 -0
  176. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/rules/__init__.py +0 -0
  177. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/rules/sparkrules_connector.py +0 -0
  178. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/scaffold/__init__.py +0 -0
  179. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/types/__init__.py +0 -0
  180. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/types/workload.py +0 -0
  181. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/__init__.py +0 -0
  182. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/backend.py +0 -0
  183. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/fallback.py +0 -0
  184. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/vrp.py +0 -0
  185. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/__init__.py +0 -0
  186. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/conftest.py +0 -0
  187. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/eval/test_consumer_safety.py +0 -0
  188. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/__init__.py +0 -0
  189. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_auto_repair_demo.py +0 -0
  190. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_canary.py +0 -0
  191. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_catalog.py +0 -0
  192. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_config.py +0 -0
  193. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_consumer_sla.py +0 -0
  194. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_example_workload.py +0 -0
  195. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_fallback_verifier.py +0 -0
  196. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_local_runtime.py +0 -0
  197. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_openlineage.py +0 -0
  198. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_reprocess.py +0 -0
  199. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_sparkrules_connector.py +0 -0
  200. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_types.py +0 -0
  201. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_verification.py +0 -0
@@ -59,3 +59,8 @@ VRP_SIGNING_KEY*
59
59
  # Local scratch / agent artifacts
60
60
  tests/_scratch_*
61
61
  agent-transcripts/
62
+
63
+ # Metadata-driven compile output
64
+ examples/retail-mesh/generated/
65
+ examples/medallion-e2e/generated/
66
+ domains/
@@ -2,6 +2,32 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ## [1.0.0] - 2026-06-14
8
+
9
+ Production release: metadata-driven medallion mesh, zero-friction CLI, and Terraform deploy path.
10
+
11
+ ### Added
12
+
13
+ - **Metadata-driven pipeline compiler** (`serverless-data-mesh compile`)
14
+ - `sdm/v1` `DataProductPipeline` and `MedallionMesh` YAML contract models
15
+ - Generated artifacts: handler, readers stub, pipeline_config, Step Functions, EventBridge, tests
16
+ - `serverless_data_mesh.compile.runtime.run_metadata_pipeline`
17
+ - Example contract: `examples/contracts/payments.mesh.pipeline.yaml`
18
+ - **Real-world retail ETL walkthrough**: `examples/retail-mesh/` (5 pipelines, PySpark on Lambda)
19
+ - **Medallion E2E mesh**: `examples/medallion-e2e/` — one YAML → bronze/silver/gold for all domains
20
+ - **Complete metadata guide**: `docs/metadata-driven-pipeline.md` — full schema, deploy, CI/CD
21
+ - **Zero-friction CLI**: `new`, `apply`, `validate`, `doctor` — YAML to full mesh in 2 commands
22
+ - **Terraform medallion-mesh module** and `environments/medallion/` stack
23
+ - Prod stack: mesh trust dashboard domains, optional Lake Formation governance module
24
+ - Dependency: `pyyaml>=6`
25
+
26
+ ### Changed
27
+
28
+ - `serverless-data-mesh init` now uses the compile pipeline (outputs `mesh.pipeline.yaml`)
29
+ - PyPI classifier: **Production/Stable**
30
+
5
31
  ## [0.2.0] - 2026-06-15
6
32
 
7
33
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: serverless-data-mesh
3
- Version: 0.2.0
3
+ Version: 1.0.0
4
4
  Summary: Federated data mesh framework for proof-gated, exactly-once Iceberg data product publication on AWS Lambda.
5
5
  Project-URL: Homepage, https://github.com/vaquarkhan/aws-serverless-datamesh-framework
6
6
  Project-URL: Documentation, https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme
@@ -10,8 +10,8 @@ Project-URL: PyPI, https://pypi.org/project/serverless-data-mesh/
10
10
  Author: Serverless Data Mesh Contributors
11
11
  License-Expression: Apache-2.0
12
12
  License-File: LICENSE
13
- Keywords: aws,data-as-a-product,data-mesh,domain-oriented,durable-execution,federated-data-mesh,federated-governance,iceberg,iceguard,lakehouse,lambda,pyiceberg,rule-engine,serverless,sparkrules,vaquar-pattern,veridata-recon
14
- Classifier: Development Status :: 3 - Alpha
13
+ Keywords: aws,bronze-silver-gold,data-as-a-product,data-mesh,domain-oriented,durable-execution,etl,federated-data-mesh,federated-governance,iceberg,iceguard,lakehouse,lambda,medallion,metadata-driven,pyiceberg,rule-engine,serverless,sparkrules,vaquar-pattern,veridata-recon
14
+ Classifier: Development Status :: 5 - Production/Stable
15
15
  Classifier: Intended Audience :: Developers
16
16
  Classifier: License :: OSI Approved :: Apache Software License
17
17
  Classifier: Operating System :: OS Independent
@@ -27,6 +27,7 @@ Requires-Dist: aws-durable-execution-sdk-python>=1.0.0
27
27
  Requires-Dist: boto3>=1.34
28
28
  Requires-Dist: iceguard>=1.0.0
29
29
  Requires-Dist: pyiceberg[glue,rest-sigv4]>=0.7.0
30
+ Requires-Dist: pyyaml>=6
30
31
  Requires-Dist: veridata-recon>=0.1.0
31
32
  Provides-Extra: all
32
33
  Requires-Dist: pyspark>=3.5.0; extra == 'all'
@@ -66,6 +67,8 @@ Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-d
66
67
  ```bash
67
68
  pip install serverless-data-mesh
68
69
  serverless-data-mesh demo # <60s local PVDM demo, no AWS
70
+ serverless-data-mesh new --template medallion --output my-mesh
71
+ serverless-data-mesh apply --contract my-mesh/mesh.yaml --output my-mesh/generated
69
72
  pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
70
73
  pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
71
74
  pip install "serverless-data-mesh[all]" # rules + spark
@@ -15,6 +15,8 @@ Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-d
15
15
  ```bash
16
16
  pip install serverless-data-mesh
17
17
  serverless-data-mesh demo # <60s local PVDM demo, no AWS
18
+ serverless-data-mesh new --template medallion --output my-mesh
19
+ serverless-data-mesh apply --contract my-mesh/mesh.yaml --output my-mesh/generated
18
20
  pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
19
21
  pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
20
22
  pip install "serverless-data-mesh[all]" # rules + spark
@@ -5,6 +5,7 @@
5
5
  **Governed, exactly-once lakehouse writes on AWS Lambda - with cryptographic proof, not just green job logs.**
6
6
 
7
7
  [![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/downloads/)
8
+ [![PyPI](https://img.shields.io/pypi/v/serverless-data-mesh.svg)](https://pypi.org/project/serverless-data-mesh/)
8
9
  [![License](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE)
9
10
  [![AWS Lambda](https://img.shields.io/badge/AWS-Lambda%20%2B%20Durable%20Execution-orange.svg)](https://docs.aws.amazon.com/lambda/)
10
11
  [![Iceberg](https://img.shields.io/badge/Apache-Iceberg-00A4EF.svg)](https://iceberg.apache.org/)
@@ -17,7 +18,7 @@ An open Python framework for **federated data mesh** lakehouse publication on AW
17
18
  **domain-oriented ownership**, **data as a product**, and **self-serve write infrastructure** for cross-domain teams.<br/>
18
19
  **Producer** domains publish governed **data products** · **Steward** notaries enforce **federated computational governance** · **Publisher** zones expose consumer-ready **Iceberg data products** to the mesh.
19
20
 
20
- [**Vaquar Pattern blog**](docs/blog-the-vaquar-pattern.md) · [**Vaquar Pattern spec**](docs/vaquar-pattern.md) · [**Why it exists**](docs/why-serverless-data-mesh.md) · [**Getting started**](docs/getting-started.md) · [**Deploy**](infrastructure/terraform/README.md)
21
+ [**PyPI**](https://pypi.org/project/serverless-data-mesh/) · [**Vaquar Pattern blog**](docs/blog-the-vaquar-pattern.md) · [**Vaquar Pattern spec**](docs/vaquar-pattern.md) · [**Why it exists**](docs/why-serverless-data-mesh.md) · [**Getting started**](docs/getting-started.md) · [**Deploy**](infrastructure/terraform/README.md)
21
22
 
22
23
  </div>
23
24
 
@@ -215,13 +216,61 @@ Lambda :live (15-min segments, up to 90+ min total)
215
216
 
216
217
  ### Try in 60 seconds (no AWS)
217
218
 
218
- Works on **Windows, Mac, and Linux** - pure-Python verifier fallback when Rust wheels unavailable.
219
+ Works on **Windows, Mac, and Linux** pure-Python verifier fallback when Rust wheels unavailable.
219
220
 
220
221
  ```bash
221
222
  pip install serverless-data-mesh
222
223
  serverless-data-mesh demo
223
224
  ```
224
225
 
226
+ ### Install from PyPI
227
+
228
+ **Package:** [`serverless-data-mesh`](https://pypi.org/project/serverless-data-mesh/) · **Requires Python 3.12+** · **Latest:** [1.0.0](https://pypi.org/project/serverless-data-mesh/1.0.0/)
229
+
230
+ | | Link |
231
+ |---|------|
232
+ | **PyPI project** | https://pypi.org/project/serverless-data-mesh/ |
233
+ | **Download files (1.0.0)** | https://pypi.org/project/serverless-data-mesh/1.0.0/#files |
234
+
235
+ **Recommended install (pip):**
236
+
237
+ ```bash
238
+ # Latest release
239
+ pip install serverless-data-mesh
240
+
241
+ # Pin a version (recommended for production)
242
+ pip install serverless-data-mesh==1.0.0
243
+
244
+ # Upgrade
245
+ pip install -U serverless-data-mesh
246
+ ```
247
+
248
+ | Extra | Install command | What you get |
249
+ |-------|-----------------|--------------|
250
+ | *(core)* | `pip install serverless-data-mesh` | IceGuard, veridata-recon, Durable SDK, PyIceberg Glue REST, boto3 |
251
+ | `[rules]` | `pip install "serverless-data-mesh[rules]"` | + [SparkRules](https://pypi.org/project/sparkrules/) DRL on Lambda |
252
+ | `[spark]` | `pip install "serverless-data-mesh[spark]"` | + PySpark + SparkRules (large Lambda package) |
253
+ | `[all]` | `pip install "serverless-data-mesh[all]"` | rules + spark |
254
+ | `[dev]` | `pip install "serverless-data-mesh[dev]"` | pytest, ruff, pre-commit (contributors) |
255
+
256
+ **Verify install:**
257
+
258
+ ```bash
259
+ python -c "import serverless_data_mesh as sdm; print(sdm.__version__)"
260
+ serverless-data-mesh demo # local PVDM gate demo (<60s, no AWS)
261
+ serverless-data-mesh init --help # minimal contract → full pipeline
262
+ serverless-data-mesh compile --contract mesh.pipeline.yaml --output domains/
263
+ serverless-data-mesh dashboard # mesh trust dashboard HTML
264
+ ```
265
+
266
+ **Platform notes:**
267
+
268
+ - **Linux (Lambda / CI):** full cryptographic VRP via `veridata-recon` wheels.
269
+ - **Windows / Mac (local dev):** `demo`, `canary`, and `reprocess-demo` work via pure-Python fallback when Rust wheels are unavailable.
270
+ - **AWS deploy:** build a Linux-compatible Lambda zip with `infrastructure/terraform/scripts/package_lambda.sh` (see [PyPI guide](docs/pypi.md)).
271
+
272
+ → Full install, extras, and publish docs: [docs/pypi.md](docs/pypi.md)
273
+
225
274
  ### Cost comparison (published estimates)
226
275
 
227
276
  | Workload | Lambda+PVDM | Glue ETL | Savings |
@@ -232,10 +281,36 @@ serverless-data-mesh demo
232
281
 
233
282
  Details: [benchmarks/README.md](benchmarks/README.md) · `make cost-estimate`
234
283
 
235
- ### Scaffold a new domain (30 seconds)
284
+ ### Scaffold or compile a pipeline (30 seconds)
285
+
286
+ **From YAML contract (recommended):**
287
+
288
+ ```bash
289
+ serverless-data-mesh compile \
290
+ --contract examples/contracts/payments.mesh.pipeline.yaml \
291
+ --output domains/
292
+ ```
293
+
294
+ **Quick init (minimal contract):**
236
295
 
237
296
  ```bash
238
297
  serverless-data-mesh init --domain payments --table fact_payments --account 123456789012
298
+ ```
299
+
300
+ Generates handler, Step Functions ASL, EventBridge schedule, consumer SLA, Terraform stubs, and tests from `mesh.pipeline.yaml`. Domain teams only implement `readers.py`.
301
+
302
+ **Full medallion mesh (bronze → silver → gold) — one YAML, all pipelines:**
303
+
304
+ ```bash
305
+ serverless-data-mesh new --template northstar --output my-mesh
306
+ serverless-data-mesh apply --contract my-mesh/mesh.yaml --output my-mesh/generated
307
+ # → 6 PVDM pipelines + domain + mesh orchestrators (orders + payments)
308
+ ```
309
+
310
+ → [Medallion E2E guide](examples/medallion-e2e/README.md)
311
+ → [Metadata-driven pipeline guide](docs/metadata-driven-pipeline.md)
312
+
313
+ ```bash
239
314
  serverless-data-mesh dashboard # HTML trust dashboard (proofs / CloudWatch / demo)
240
315
  serverless-data-mesh dashboard --cloudwatch # live VRP metrics from CloudWatch
241
316
  serverless-data-mesh canary # VRP canary before promotion
@@ -260,16 +335,6 @@ make walkthrough # 12-step tutorial (no AWS)
260
335
  make benchmark # consumer safety: corrupt data never commits
261
336
  ```
262
337
 
263
- ### Install from PyPI
264
-
265
- ```bash
266
- pip install serverless-data-mesh
267
- pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
268
- pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
269
- ```
270
-
271
- → [PyPI guide](docs/pypi.md)
272
-
273
338
  ### Minimal code example
274
339
 
275
340
  ```python
@@ -326,6 +391,9 @@ terraform init && terraform apply
326
391
 
327
392
  | Document | What you will learn |
328
393
  |----------|---------------------|
394
+ | **[Metadata-driven pipelines](docs/metadata-driven-pipeline.md)** | **Complete guide: YAML schema, bronze/silver/gold, compile, deploy** |
395
+ | **[Medallion E2E example](examples/medallion-e2e/README.md)** | One YAML → 6 pipelines + orchestrators |
396
+ | **[Retail flat ETL example](examples/retail-mesh/README.md)** | 5 domain pipelines, PySpark on Lambda |
329
397
  | **[Vaquar Pattern blog](docs/blog-the-vaquar-pattern.md)** | **Full article: images, E2E journey, adoption playbook** |
330
398
  | **[Vaquar Pattern spec](docs/vaquar-pattern.md)** | Formal spec - cite this in architecture docs |
331
399
  | **[Why Serverless Data Mesh](docs/why-serverless-data-mesh.md)** | Blog: industry problem, connectivity, portfolio stack |
@@ -345,6 +413,7 @@ terraform init && terraform apply
345
413
  ```
346
414
  serverless-data-mesh/
347
415
  ├── docs/
416
+ │ ├── metadata-driven-pipeline.md # Complete YAML → pipeline guide (medallion)
348
417
  │ ├── blog-the-vaquar-pattern.md # Full Vaquar Pattern blog (images, E2E)
349
418
  │ ├── vaquar-pattern.md # Formal pattern spec (cite this)
350
419
  │ ├── why-serverless-data-mesh.md # Blog article with diagrams
@@ -352,6 +421,9 @@ serverless-data-mesh/
352
421
  │ ├── data-mesh-patterns.md # Pattern catalog + coverage matrix
353
422
  │ └── images/ # Architecture and product diagrams
354
423
  ├── examples/
424
+ │ ├── medallion-e2e/ # One YAML → bronze/silver/gold mesh
425
+ │ ├── retail-mesh/ # Flat pipelines real-world ETL
426
+ │ ├── contracts/ # Single DataProductPipeline samples
355
427
  │ ├── domain_writer/ # Reference Lambda handler
356
428
  │ └── tutorials/ # Interactive walkthrough
357
429
  ├── infrastructure/
@@ -402,7 +474,7 @@ Apache-2.0. See [LICENSE](LICENSE).
402
474
 
403
475
  <div align="center">
404
476
 
405
- **Serverless Data Mesh** · [Vaquar Pattern blog](docs/blog-the-vaquar-pattern.md) · [GitHub](https://github.com/vaquarkhan/aws-serverless-datamesh-framework)
477
+ **Serverless Data Mesh** · [PyPI](https://pypi.org/project/serverless-data-mesh/) · [Vaquar Pattern blog](docs/blog-the-vaquar-pattern.md) · [GitHub](https://github.com/vaquarkhan/aws-serverless-datamesh-framework)
406
478
 
407
479
  *Domain teams own the write path. The mesh proves correctness before consumers see a snapshot.*
408
480
 
@@ -0,0 +1 @@
1
+ 1.0.0