serverless-data-mesh 0.2.0__tar.gz → 1.2.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 (282) hide show
  1. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/.gitignore +10 -0
  2. serverless_data_mesh-1.2.0/CHANGELOG.md +146 -0
  3. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/PKG-INFO +6 -3
  4. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/PYPI.md +2 -0
  5. serverless_data_mesh-1.2.0/README.md +853 -0
  6. serverless_data_mesh-1.2.0/VERSION +1 -0
  7. serverless_data_mesh-1.2.0/benchmarks/run_aws_benchmark.py +70 -0
  8. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/run_cost_estimate.py +2 -2
  9. serverless_data_mesh-1.2.0/benchmarks/run_local_benchmark.py +47 -0
  10. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/architecture.md +11 -0
  11. serverless_data_mesh-1.2.0/docs/demo-walkthrough.html +283 -0
  12. serverless_data_mesh-1.2.0/docs/due-diligence-architecture-claims.md +138 -0
  13. serverless_data_mesh-1.2.0/docs/first-mesh-on-aws.md +101 -0
  14. serverless_data_mesh-1.2.0/docs/how-to-start.md +128 -0
  15. serverless_data_mesh-1.2.0/docs/images/durable-lambda-compute-model.png +0 -0
  16. serverless_data_mesh-1.2.0/docs/images/medallion-one-yaml-mesh.png +0 -0
  17. serverless_data_mesh-1.2.0/docs/images/pipeline-creation-flow.png +0 -0
  18. serverless_data_mesh-1.2.0/docs/images/pipeline-generated-artifacts.png +0 -0
  19. serverless_data_mesh-1.2.0/docs/images/portfolio-stack-veridata-sparkrules.png +0 -0
  20. serverless_data_mesh-1.2.0/docs/images/sparkrules-pipeline-position.png +0 -0
  21. serverless_data_mesh-1.2.0/docs/images/tutorial/step-01-install-demo.gif +0 -0
  22. serverless_data_mesh-1.2.0/docs/images/tutorial/step-01-install-demo.png +0 -0
  23. serverless_data_mesh-1.2.0/docs/images/tutorial/step-02-new-mesh.gif +0 -0
  24. serverless_data_mesh-1.2.0/docs/images/tutorial/step-02-new-mesh.png +0 -0
  25. serverless_data_mesh-1.2.0/docs/images/tutorial/step-03-apply.gif +0 -0
  26. serverless_data_mesh-1.2.0/docs/images/tutorial/step-03-apply.png +0 -0
  27. serverless_data_mesh-1.2.0/docs/images/tutorial/step-04-ui.gif +0 -0
  28. serverless_data_mesh-1.2.0/docs/images/tutorial/step-04-ui.png +0 -0
  29. serverless_data_mesh-1.2.0/docs/images/tutorial/step-05-deploy.gif +0 -0
  30. serverless_data_mesh-1.2.0/docs/images/tutorial/step-05-deploy.png +0 -0
  31. serverless_data_mesh-1.2.0/docs/images/tutorial/step-06-observe.gif +0 -0
  32. serverless_data_mesh-1.2.0/docs/images/tutorial/step-06-observe.png +0 -0
  33. serverless_data_mesh-1.2.0/docs/images/tutorial/tutorial-overview.gif +0 -0
  34. serverless_data_mesh-1.2.0/docs/images/vaquar-pattern-proprietary-pvdm.png +0 -0
  35. serverless_data_mesh-1.2.0/docs/images/veridata-vrp-chunk-proof.png +0 -0
  36. serverless_data_mesh-1.2.0/docs/metadata-driven-pipeline.md +817 -0
  37. serverless_data_mesh-1.2.0/docs/observability-production.md +62 -0
  38. serverless_data_mesh-1.2.0/docs/portable-multi-cloud.md +24 -0
  39. serverless_data_mesh-1.2.0/docs/roadmap-pvdm-a-agentic.md +97 -0
  40. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/vaquar-pattern.md +33 -1
  41. serverless_data_mesh-1.2.0/docs/visual-tutorial.md +64 -0
  42. serverless_data_mesh-1.2.0/examples/__init__.py +1 -0
  43. serverless_data_mesh-1.2.0/examples/contracts/payments.mesh.pipeline.yaml +48 -0
  44. serverless_data_mesh-1.2.0/examples/domain_writer/__init__.py +1 -0
  45. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/domain_writer/handler.py +5 -4
  46. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/domain_writer/spark_io.py +2 -2
  47. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/domain_writer/workload.py +3 -2
  48. serverless_data_mesh-1.2.0/examples/durable-compute/README.md +81 -0
  49. serverless_data_mesh-1.2.0/examples/durable-compute/terraform.tfvars.example +11 -0
  50. serverless_data_mesh-1.2.0/examples/medallion-e2e/README.md +181 -0
  51. serverless_data_mesh-1.2.0/examples/medallion-e2e/northstar.mesh.yaml +135 -0
  52. serverless_data_mesh-1.2.0/examples/retail-mesh/README.md +274 -0
  53. serverless_data_mesh-1.2.0/examples/retail-mesh/compile_all.py +44 -0
  54. serverless_data_mesh-1.2.0/examples/retail-mesh/contracts/customers.mesh.pipeline.yaml +32 -0
  55. serverless_data_mesh-1.2.0/examples/retail-mesh/contracts/inventory.mesh.pipeline.yaml +34 -0
  56. serverless_data_mesh-1.2.0/examples/retail-mesh/contracts/orders.mesh.pipeline.yaml +58 -0
  57. serverless_data_mesh-1.2.0/examples/retail-mesh/contracts/payments.mesh.pipeline.yaml +36 -0
  58. serverless_data_mesh-1.2.0/examples/retail-mesh/contracts/shipping.mesh.pipeline.yaml +33 -0
  59. serverless_data_mesh-1.2.0/examples/retail-mesh/mesh-registry.yaml +63 -0
  60. serverless_data_mesh-1.2.0/examples/retail-mesh/mesh-transactions/daily-close.yaml +26 -0
  61. serverless_data_mesh-1.2.0/examples/retail-mesh/spark/orders_readers.example.py +68 -0
  62. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/tutorials/walkthrough.py +1 -1
  63. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/README.md +37 -1
  64. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/dev/main.tf +163 -0
  65. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/medallion/main.tf +122 -0
  66. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/medallion/outputs.tf +28 -0
  67. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/medallion/terraform.tfvars.example +21 -0
  68. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/medallion/variables.tf +107 -0
  69. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/medallion/versions.tf +10 -0
  70. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/producer/main.tf +6 -0
  71. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/producer/terraform.tfvars.example +1 -1
  72. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/prod/main.tf +22 -5
  73. serverless_data_mesh-1.2.0/infrastructure/terraform/environments/prod/providers.tf +13 -0
  74. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/prod/terraform.tfvars.example +5 -1
  75. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/prod/variables.tf +24 -0
  76. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/iam/main.tf +43 -0
  77. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/iam/variables.tf +6 -0
  78. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/lambda/main.tf +9 -3
  79. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/lambda/variables.tf +3 -2
  80. serverless_data_mesh-1.2.0/infrastructure/terraform/modules/lambda-fleet/main.tf +97 -0
  81. serverless_data_mesh-1.2.0/infrastructure/terraform/modules/lambda-fleet/outputs.tf +25 -0
  82. serverless_data_mesh-1.2.0/infrastructure/terraform/modules/medallion-mesh/main.tf +85 -0
  83. serverless_data_mesh-1.2.0/infrastructure/terraform/modules/medallion-mesh/outputs.tf +7 -0
  84. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/monitoring/dashboard.tf +116 -6
  85. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/monitoring/main.tf +1 -1
  86. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/monitoring/outputs.tf +1 -0
  87. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/monitoring/variables.tf +6 -0
  88. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/stepfunctions/variables.tf +1 -1
  89. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/storage/main.tf +5 -14
  90. serverless_data_mesh-1.2.0/infrastructure/terraform/scripts/package_lambda.ps1 +112 -0
  91. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/scripts/package_lambda.sh +18 -2
  92. serverless_data_mesh-1.2.0/integrations/backstage/README.md +31 -0
  93. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/pyproject.toml +17 -1
  94. serverless_data_mesh-1.2.0/schemas/sdm-v1-dataproductpipeline.json +64 -0
  95. serverless_data_mesh-1.2.0/schemas/sdm-v1-medallionmesh.json +75 -0
  96. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/__init__.py +40 -3
  97. serverless_data_mesh-1.2.0/src/serverless_data_mesh/attestation/__init__.py +19 -0
  98. serverless_data_mesh-1.2.0/src/serverless_data_mesh/attestation/pvdma.py +215 -0
  99. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/catalog/glue_connector.py +1 -1
  100. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/catalog/glue_rest.py +3 -1
  101. serverless_data_mesh-1.2.0/src/serverless_data_mesh/catalog_export/__init__.py +5 -0
  102. serverless_data_mesh-1.2.0/src/serverless_data_mesh/catalog_export/backstage.py +132 -0
  103. serverless_data_mesh-1.2.0/src/serverless_data_mesh/cli.py +580 -0
  104. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/__init__.py +16 -0
  105. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/contract.py +247 -0
  106. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/emit.py +478 -0
  107. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/from_init.py +35 -0
  108. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/loader.py +57 -0
  109. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/medallion.py +270 -0
  110. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/medallion_emit.py +403 -0
  111. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/medallion_validate.py +48 -0
  112. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/runtime.py +134 -0
  113. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/validate.py +42 -0
  114. serverless_data_mesh-1.2.0/src/serverless_data_mesh/compile/wizard.py +270 -0
  115. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/config.py +3 -3
  116. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/dashboard/cloudwatch.py +3 -5
  117. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/dashboard/trust.py +6 -4
  118. serverless_data_mesh-1.2.0/src/serverless_data_mesh/deploy/__init__.py +5 -0
  119. serverless_data_mesh-1.2.0/src/serverless_data_mesh/deploy/runner.py +139 -0
  120. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/governance/consumer_sla.py +9 -6
  121. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/lineage/openlineage.py +2 -2
  122. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/local/runtime.py +115 -8
  123. serverless_data_mesh-1.2.0/src/serverless_data_mesh/metrics/__init__.py +5 -0
  124. serverless_data_mesh-1.2.0/src/serverless_data_mesh/metrics/mesh_trust.py +72 -0
  125. serverless_data_mesh-1.2.0/src/serverless_data_mesh/observability/__init__.py +5 -0
  126. serverless_data_mesh-1.2.0/src/serverless_data_mesh/observability/structured.py +15 -0
  127. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/orchestration/canary.py +2 -1
  128. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/orchestration/coordinator.py +98 -8
  129. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/orchestration/reprocess.py +4 -7
  130. serverless_data_mesh-1.2.0/src/serverless_data_mesh/portable/__init__.py +17 -0
  131. serverless_data_mesh-1.2.0/src/serverless_data_mesh/portable/cloud.py +104 -0
  132. serverless_data_mesh-1.2.0/src/serverless_data_mesh/py.typed +1 -0
  133. serverless_data_mesh-1.2.0/src/serverless_data_mesh/readers/__init__.py +21 -0
  134. serverless_data_mesh-1.2.0/src/serverless_data_mesh/readers/s3_bronze.py +161 -0
  135. serverless_data_mesh-1.2.0/src/serverless_data_mesh/readers/upstream_parquet.py +125 -0
  136. serverless_data_mesh-1.2.0/src/serverless_data_mesh/rules/__init__.py +14 -0
  137. serverless_data_mesh-1.2.0/src/serverless_data_mesh/rules/gate.py +60 -0
  138. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/rules/sparkrules_connector.py +7 -3
  139. serverless_data_mesh-1.2.0/src/serverless_data_mesh/scaffold/init_domain.py +25 -0
  140. serverless_data_mesh-1.2.0/src/serverless_data_mesh/templates/medallion-starter.mesh.yaml +46 -0
  141. serverless_data_mesh-1.2.0/src/serverless_data_mesh/templates/single-pipeline.mesh.yaml +34 -0
  142. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/types/workload.py +4 -3
  143. serverless_data_mesh-1.2.0/src/serverless_data_mesh/ui/__init__.py +5 -0
  144. serverless_data_mesh-1.2.0/src/serverless_data_mesh/ui/data.py +316 -0
  145. serverless_data_mesh-1.2.0/src/serverless_data_mesh/ui/server.py +163 -0
  146. serverless_data_mesh-1.2.0/src/serverless_data_mesh/ui/static/app.css +200 -0
  147. serverless_data_mesh-1.2.0/src/serverless_data_mesh/ui/static/app.js +196 -0
  148. serverless_data_mesh-1.2.0/src/serverless_data_mesh/ui/static/index.html +143 -0
  149. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/verification/__init__.py +11 -3
  150. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/verification/fallback.py +5 -3
  151. serverless_data_mesh-1.2.0/src/serverless_data_mesh/verification/kms_sign.py +123 -0
  152. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/verification/vrp.py +6 -5
  153. serverless_data_mesh-1.2.0/tests/__init__.py +1 -0
  154. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/conftest.py +6 -0
  155. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/eval/test_consumer_safety.py +3 -2
  156. serverless_data_mesh-1.2.0/tests/unit/__init__.py +1 -0
  157. serverless_data_mesh-1.2.0/tests/unit/test_attestation_kms.py +100 -0
  158. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_catalog.py +0 -1
  159. serverless_data_mesh-1.2.0/tests/unit/test_catalog_export.py +31 -0
  160. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_cli_scaffold.py +4 -2
  161. serverless_data_mesh-1.2.0/tests/unit/test_compile.py +74 -0
  162. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_consumer_sla.py +9 -6
  163. serverless_data_mesh-1.2.0/tests/unit/test_coverage_new_modules.py +327 -0
  164. serverless_data_mesh-1.2.0/tests/unit/test_deploy.py +24 -0
  165. serverless_data_mesh-1.2.0/tests/unit/test_medallion.py +48 -0
  166. serverless_data_mesh-1.2.0/tests/unit/test_metrics.py +37 -0
  167. serverless_data_mesh-1.2.0/tests/unit/test_observability.py +45 -0
  168. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_openlineage.py +9 -6
  169. serverless_data_mesh-1.2.0/tests/unit/test_reference_readers.py +37 -0
  170. serverless_data_mesh-1.2.0/tests/unit/test_schemas.py +35 -0
  171. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_sparkrules_connector.py +0 -1
  172. serverless_data_mesh-1.2.0/tests/unit/test_ui_server.py +97 -0
  173. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_verification.py +4 -1
  174. serverless_data_mesh-1.2.0/tests/unit/test_version.py +22 -0
  175. serverless_data_mesh-1.2.0/tests/unit/test_wizard.py +51 -0
  176. serverless_data_mesh-0.2.0/CHANGELOG.md +0 -81
  177. serverless_data_mesh-0.2.0/README.md +0 -409
  178. serverless_data_mesh-0.2.0/VERSION +0 -1
  179. serverless_data_mesh-0.2.0/examples/__init__.py +0 -0
  180. serverless_data_mesh-0.2.0/examples/domain_writer/__init__.py +0 -0
  181. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/orders/handler.py +0 -22
  182. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/payments/handler.py +0 -22
  183. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/dev/main.tf +0 -160
  184. serverless_data_mesh-0.2.0/infrastructure/terraform/scripts/package_lambda.ps1 +0 -31
  185. serverless_data_mesh-0.2.0/src/serverless_data_mesh/cli.py +0 -165
  186. serverless_data_mesh-0.2.0/src/serverless_data_mesh/metrics/__init__.py +0 -5
  187. serverless_data_mesh-0.2.0/src/serverless_data_mesh/metrics/mesh_trust.py +0 -56
  188. serverless_data_mesh-0.2.0/src/serverless_data_mesh/py.typed +0 -0
  189. serverless_data_mesh-0.2.0/src/serverless_data_mesh/rules/__init__.py +0 -8
  190. serverless_data_mesh-0.2.0/src/serverless_data_mesh/scaffold/init_domain.py +0 -210
  191. serverless_data_mesh-0.2.0/tests/__init__.py +0 -0
  192. serverless_data_mesh-0.2.0/tests/unit/__init__.py +0 -0
  193. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/LICENSE +0 -0
  194. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/README.md +0 -0
  195. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/results/2026-06-baseline.json +0 -0
  196. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/run_benchmark.sh +0 -0
  197. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/workloads/100k_rows.py +0 -0
  198. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/workloads/10m_rows.py +0 -0
  199. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/benchmarks/workloads/1m_rows.py +0 -0
  200. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/blog-the-vaquar-pattern.md +0 -0
  201. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/data-mesh-end-to-end.md +0 -0
  202. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/data-mesh-patterns.md +0 -0
  203. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/deployment.md +0 -0
  204. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/domain-contracts.md +0 -0
  205. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/getting-started.md +0 -0
  206. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/glue-connector.md +0 -0
  207. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/lambda-execution-flow.png +0 -0
  208. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/serverless-data-mesh-hero.png +0 -0
  209. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/three-account-data-mesh.png +0 -0
  210. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/vaquar-pattern-blog-hero.png +0 -0
  211. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/vaquar-pattern-e2e-journey.png +0 -0
  212. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/vaquar-pattern-invariant.png +0 -0
  213. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/why-sdm-four-phase-connectivity.png +0 -0
  214. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/why-sdm-hero-connectivity.png +0 -0
  215. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/images/why-sdm-trust-gap.png +0 -0
  216. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/mesh-trust-dashboard.md +0 -0
  217. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/pypi.md +0 -0
  218. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/sparkrules-connector.md +0 -0
  219. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/terraform-guide.md +0 -0
  220. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/docs/why-serverless-data-mesh.md +0 -0
  221. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/domain_writer/README.md +0 -0
  222. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/domain_writer/io.py +0 -0
  223. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/domain_writer/rules_io.py +0 -0
  224. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/multi-domain-orders-payments/README.md +0 -0
  225. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/multi-domain-orders-payments/coordinator_config.yaml +0 -0
  226. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/multi-domain-orders-payments/test_atomicity.py +0 -0
  227. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/tutorials/README.md +0 -0
  228. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/examples/tutorials/verification_gate_demo.py +0 -0
  229. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/grafana/mesh-trust-dashboard.json +0 -0
  230. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/sam/README.md +0 -0
  231. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/sam/template.yaml +0 -0
  232. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/dev/terraform.tfvars.example +0 -0
  233. {serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod → serverless_data_mesh-1.2.0/infrastructure/terraform/environments/medallion}/providers.tf +0 -0
  234. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/README.md +0 -0
  235. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/publisher/main.tf +0 -0
  236. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/publisher/terraform.tfvars.example +0 -0
  237. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/steward/main.tf +0 -0
  238. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/multi-account/steward/terraform.tfvars.example +0 -0
  239. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/prod/outputs.tf +0 -0
  240. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/environments/prod/versions.tf +0 -0
  241. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/eventbridge/main.tf +0 -0
  242. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/eventbridge/outputs.tf +0 -0
  243. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/eventbridge/variables.tf +0 -0
  244. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/eventbridge/versions.tf +0 -0
  245. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/governance/main.tf +0 -0
  246. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/governance/versions.tf +0 -0
  247. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/iam/outputs.tf +0 -0
  248. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/iam/versions.tf +0 -0
  249. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/lambda/outputs.tf +0 -0
  250. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/lambda/versions.tf +0 -0
  251. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/messaging/main.tf +0 -0
  252. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/messaging/outputs.tf +0 -0
  253. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/messaging/variables.tf +0 -0
  254. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/messaging/versions.tf +0 -0
  255. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/monitoring/versions.tf +0 -0
  256. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/stepfunctions/main.tf +0 -0
  257. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/stepfunctions/outputs.tf +0 -0
  258. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/stepfunctions/state_machine.asl.json.tpl +0 -0
  259. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/stepfunctions/versions.tf +0 -0
  260. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/storage/outputs.tf +0 -0
  261. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/storage/variables.tf +0 -0
  262. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/infrastructure/terraform/modules/storage/versions.tf +0 -0
  263. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/catalog/__init__.py +0 -0
  264. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/dashboard/__init__.py +0 -0
  265. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/exceptions.py +0 -0
  266. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/governance/__init__.py +0 -0
  267. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/lineage/__init__.py +0 -0
  268. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/local/__init__.py +0 -0
  269. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/orchestration/__init__.py +0 -0
  270. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/orchestration/durable_steps.py +0 -0
  271. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/orchestration/state.py +0 -0
  272. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/scaffold/__init__.py +0 -0
  273. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/types/__init__.py +0 -0
  274. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/src/serverless_data_mesh/verification/backend.py +0 -0
  275. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_auto_repair_demo.py +0 -0
  276. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_canary.py +0 -0
  277. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_config.py +0 -0
  278. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_example_workload.py +1 -1
  279. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_fallback_verifier.py +0 -0
  280. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_local_runtime.py +0 -0
  281. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_reprocess.py +0 -0
  282. {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.2.0}/tests/unit/test_types.py +0 -0
@@ -59,3 +59,13 @@ 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/
67
+ infrastructure/terraform/fixtures/generated-mesh/
68
+
69
+ # Keep VS Code YAML schema mapping
70
+ !.vscode/
71
+ !.vscode/settings.json
@@ -0,0 +1,146 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [1.2.0] - 2026-07-21
8
+
9
+ ### Added
10
+
11
+ - **PVDM-A Decision Attestation** + CLI `attest` + coordinator/local wiring
12
+ - **Optional KMS VRP envelopes** (`VRP_KMS_KEY_ID`)
13
+ - **Pre-physical rules gate** (`SDM_RULES_GATE` / SparkRules)
14
+ - **Mesh control center UI** with dashboards, `/walkthrough` GIF demo, one-click demos
15
+ - **README GIF walkthrough** + durable-compute example + Docker image (`ghcr.io`)
16
+ - **100% coverage gate** for attestation / kms_sign / rules.gate / ui.data (`scripts/coverage_gate.py`)
17
+
18
+ ### Fixed
19
+
20
+ - **Lambda VERSION path**: `__init__.py` tries `serverless_data_mesh/VERSION`, repo root, and metadata; wheel bundles `VERSION` in package
21
+ - **IAM**: `cloudwatch:PutMetricData` for `ServerlessDataMesh*` namespace on domain writer role
22
+ - **Terraform storage**: lifecycle `for_each` uses static bucket keys (not computed `.id` map keys)
23
+ - **Metrics**: `SDM_METRICS_ENABLED` / `SDM_DISABLE_METRICS` opt-out; PutMetricData failures are non-fatal
24
+ - **Lambda packaging**: `SDM_PIPELINE_SRC` overlays compiled `handler.py` at zip root; `handler.lambda_handler` in manifest and Terraform
25
+ - **Observability:** structured `pvdm_outcome` JSON logs; LocalPVDMRuntime S3 proofs when `VRP_PROOF_BUCKET` set
26
+ - **Monitoring:** ops dashboard widgets (invocations, errors, duration, DLQ); DLQ alarm; JSON log metric filters
27
+ - **Scripts:** `aws_observability_smoke.sh`, `aws_dlq_smoke_test.sh`; [observability-production.md](docs/observability-production.md)
28
+
29
+ ## [1.1.0] - 2026-06-14
30
+
31
+ Enterprise completeness: reference readers, per-layer Lambda fleet, deploy CLI, Backstage, schemas, UI, benchmarks, multi-cloud stubs.
32
+
33
+ ### Added
34
+
35
+ - **Reference readers**: S3 bronze landing + upstream Parquet (`serverless_data_mesh.readers`)
36
+ - **Per-layer Lambda fleet** Terraform module (`lambda-fleet`) + `layer_lambda.manifest.json` from compile
37
+ - **`serverless-data-mesh deploy`** — apply + terraform + optional Step Functions start
38
+ - **`serverless-data-mesh catalog export`** — Backstage `catalog-info.yaml` entities
39
+ - **`serverless-data-mesh ui`** — local mesh control panel (HTTP)
40
+ - **JSON Schema** for `sdm/v1` contracts + VS Code YAML autocomplete
41
+ - **Portable cloud** adapters (AWS production, GCP/Azure stubs)
42
+ - **Docs**: `docs/first-mesh-on-aws.md` (5-minute guide)
43
+ - **CI**: medallion Terraform validate, local benchmark, smoke-aws + benchmark workflows
44
+ - **Benchmarks**: `run_local_benchmark.py`, `run_aws_benchmark.py`
45
+
46
+ ## [1.0.0] - 2026-06-14
47
+
48
+ Production release: metadata-driven medallion mesh, zero-friction CLI, and Terraform deploy path.
49
+
50
+ ### Added
51
+
52
+ - **Metadata-driven pipeline compiler** (`serverless-data-mesh compile`)
53
+ - `sdm/v1` `DataProductPipeline` and `MedallionMesh` YAML contract models
54
+ - Generated artifacts: handler, readers stub, pipeline_config, Step Functions, EventBridge, tests
55
+ - `serverless_data_mesh.compile.runtime.run_metadata_pipeline`
56
+ - Example contract: `examples/contracts/payments.mesh.pipeline.yaml`
57
+ - **Real-world retail ETL walkthrough**: `examples/retail-mesh/` (5 pipelines, PySpark on Lambda)
58
+ - **Medallion E2E mesh**: `examples/medallion-e2e/` — one YAML → bronze/silver/gold for all domains
59
+ - **Complete metadata guide**: `docs/metadata-driven-pipeline.md` — full schema, deploy, CI/CD
60
+ - **Zero-friction CLI**: `new`, `apply`, `validate`, `doctor` — YAML to full mesh in 2 commands
61
+ - **Terraform medallion-mesh module** and `environments/medallion/` stack
62
+ - Prod stack: mesh trust dashboard domains, optional Lake Formation governance module
63
+ - Dependency: `pyyaml>=6`
64
+
65
+ ### Changed
66
+
67
+ - `serverless-data-mesh init` now uses the compile pipeline (outputs `mesh.pipeline.yaml`)
68
+ - PyPI classifier: **Production/Stable**
69
+
70
+ ## [0.2.0] - 2026-06-15
71
+
72
+ ### Added
73
+
74
+ - **Auto VRP reprocessing** (`orchestration/reprocess.py`): detect drops, repair sink, re-proof, commit or escalate
75
+ - **Consumer SLA enforcement** (`governance/consumer_sla.py`): freshness, completeness, required columns; LF grant hook
76
+ - **Live CloudWatch trust dashboard** (Terraform `monitoring/dashboard.tf` + `publish_vrp_metric`)
77
+ - **Grafana template** (`infrastructure/grafana/mesh-trust-dashboard.json`)
78
+ - **Lake Formation governance module** (`terraform/modules/governance/`)
79
+ - CLI: `serverless-data-mesh canary`, `reprocess-demo`, `dashboard --cloudwatch`
80
+ - Scaffold: `consumer_sla.yaml`, `step_function.asl.json`, richer handler imports
81
+ - Docs: `docs/mesh-trust-dashboard.md`
82
+ - Tests: reprocess, consumer SLA, canary, auto-repair demo
83
+
84
+ ### Changed
85
+
86
+ - `IceGuardDurableCoordinator` supports optional `sink_reader` + `enable_auto_repair`
87
+ - Trust dashboard supports proofs scan, CloudWatch live mode, and demo fallback
88
+
89
+ ## [0.1.3] - 2026-06-15
90
+
91
+ ### Added
92
+
93
+ - **Pure-Python fallback verifier** when veridata-recon wheels unavailable (Windows/Mac demo works)
94
+ - `serverless-data-mesh init` domain scaffold CLI
95
+ - `serverless-data-mesh dashboard` mesh trust dashboard HTML
96
+ - `benchmarks/run_cost_estimate.py` with published cost estimates (100K/1M/10M)
97
+ - `ConsumerSLAContract` type and `run_canary_comparison` for progressive delivery
98
+ - Tests: fallback verifier, scaffold, dashboard
99
+
100
+ ### Changed
101
+
102
+ - Local demo, gate demo, multi-domain, and benchmark use `create_proof_generator()` auto-backend
103
+ - `benchmarks/results/2026-06-baseline.json` populated (pricing model estimated)
104
+
105
+ ## [0.1.2] - 2026-06-15
106
+
107
+ ### Added
108
+
109
+ - **Local demo**: `serverless-data-mesh demo` runs PVDM in <60s without AWS (`LocalPVDMRuntime`)
110
+ - `examples/tutorials/verification_gate_demo.py`: corrupt data blocked before consumers
111
+ - `examples/multi-domain-orders-payments/`: deferred mesh leader commit + `test_atomicity.py`
112
+ - `benchmarks/`: cost comparison methodology, workloads (100k/1M/10M), results placeholder
113
+ - `serverless_data_mesh.lineage`: OpenLineage `emit_openlineage_event` on commit
114
+ - Tests: `test_local_runtime.py`, `test_openlineage.py`
115
+
116
+ ## [0.1.1] - 2026-06-15
117
+
118
+ ### Added
119
+
120
+ - **Vaquar Pattern** (`docs/vaquar-pattern.md`): proof-gated serverless lakehouse publication (PVDM)
121
+ - Blog-style [why-serverless-data-mesh.md](docs/why-serverless-data-mesh.md) with connectivity diagrams
122
+ - New diagram assets: `why-sdm-hero-connectivity.png`, `why-sdm-four-phase-connectivity.png`, `why-sdm-trust-gap.png`
123
+
124
+ ### Fixed
125
+
126
+ - Hatch `VERSION` parsing: `pattern` for plain semver file (CI build green)
127
+ - `__version__` reads from package metadata when installed; dev fallback uses `parents[2]`
128
+ - Multi-account Terraform: Steward creates only checkpoint/proof buckets; Publisher creates only lakehouse
129
+ - Storage module: optional per-bucket creation via nullable bucket names
130
+
131
+ ### Changed
132
+
133
+ - Pattern catalog: Vaquar Pattern as flagship pattern #0 in [data-mesh-patterns.md](docs/data-mesh-patterns.md)
134
+
135
+ ## [0.1.0] - 2026-06-14
136
+
137
+ ### Added
138
+
139
+ - Initial release: IceGuard + Durable Execution + veridata-recon + Glue REST
140
+ - `IceGuardDurableCoordinator` for cross-domain transaction boundaries
141
+ - `GlueRestCatalogAdapter` for SigV4 Iceberg metadata commits
142
+ - `VRPProofGenerator` and `validate_then_commit` hooks
143
+ - Domain writer Lambda example with SAM template
144
+ - `VERSION` file, pre-commit, Dependabot, SECURITY.md, consumer safety benchmark
145
+ - `SparkRulesConnector` (`[rules]` extra), PyPI publish workflow
146
+ - CI workflow, unit tests, and documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: serverless-data-mesh
3
- Version: 0.2.0
3
+ Version: 1.2.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