serverless-data-mesh 1.0.0__tar.gz → 1.3.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 (301) hide show
  1. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/.gitignore +5 -0
  2. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/CHANGELOG.md +53 -0
  3. serverless_data_mesh-1.3.0/NOTICE +14 -0
  4. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/PKG-INFO +8 -3
  5. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/PYPI.md +5 -1
  6. serverless_data_mesh-1.3.0/README.md +911 -0
  7. serverless_data_mesh-1.3.0/VERSION +1 -0
  8. serverless_data_mesh-1.3.0/benchmarks/run_aws_benchmark.py +70 -0
  9. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/run_cost_estimate.py +2 -2
  10. serverless_data_mesh-1.3.0/benchmarks/run_local_benchmark.py +47 -0
  11. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/architecture.md +33 -14
  12. serverless_data_mesh-1.3.0/docs/aws-production-deploy.md +184 -0
  13. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/blog-the-vaquar-pattern.md +15 -13
  14. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/data-mesh-end-to-end.md +13 -11
  15. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/data-mesh-patterns.md +6 -5
  16. serverless_data_mesh-1.3.0/docs/demo-walkthrough.html +283 -0
  17. serverless_data_mesh-1.3.0/docs/deployment.md +65 -0
  18. serverless_data_mesh-1.3.0/docs/due-diligence-architecture-claims.md +153 -0
  19. serverless_data_mesh-1.3.0/docs/first-mesh-on-aws.md +101 -0
  20. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/getting-started.md +1 -1
  21. serverless_data_mesh-1.3.0/docs/how-to-start.md +128 -0
  22. serverless_data_mesh-1.3.0/docs/images/durable-lambda-compute-model.png +0 -0
  23. serverless_data_mesh-1.3.0/docs/images/lambda-execution-flow.png +0 -0
  24. serverless_data_mesh-1.3.0/docs/images/medallion-one-yaml-mesh.png +0 -0
  25. serverless_data_mesh-1.3.0/docs/images/pipeline-creation-flow.png +0 -0
  26. serverless_data_mesh-1.3.0/docs/images/pipeline-generated-artifacts.png +0 -0
  27. serverless_data_mesh-1.3.0/docs/images/portfolio-stack-veridata-sparkrules.png +0 -0
  28. serverless_data_mesh-1.3.0/docs/images/pvdm-fail-closed-vs-traditional.png +0 -0
  29. serverless_data_mesh-1.3.0/docs/images/pvdm-lifecycle-readme.png +0 -0
  30. serverless_data_mesh-1.3.0/docs/images/sparkrules-pipeline-position.png +0 -0
  31. serverless_data_mesh-1.3.0/docs/images/tutorial/step-01-install-demo.gif +0 -0
  32. serverless_data_mesh-1.3.0/docs/images/tutorial/step-01-install-demo.png +0 -0
  33. serverless_data_mesh-1.3.0/docs/images/tutorial/step-02-new-mesh.gif +0 -0
  34. serverless_data_mesh-1.3.0/docs/images/tutorial/step-02-new-mesh.png +0 -0
  35. serverless_data_mesh-1.3.0/docs/images/tutorial/step-03-apply.gif +0 -0
  36. serverless_data_mesh-1.3.0/docs/images/tutorial/step-03-apply.png +0 -0
  37. serverless_data_mesh-1.3.0/docs/images/tutorial/step-04-ui.gif +0 -0
  38. serverless_data_mesh-1.3.0/docs/images/tutorial/step-04-ui.png +0 -0
  39. serverless_data_mesh-1.3.0/docs/images/tutorial/step-05-deploy.gif +0 -0
  40. serverless_data_mesh-1.3.0/docs/images/tutorial/step-05-deploy.png +0 -0
  41. serverless_data_mesh-1.3.0/docs/images/tutorial/step-06-observe.gif +0 -0
  42. serverless_data_mesh-1.3.0/docs/images/tutorial/step-06-observe.png +0 -0
  43. serverless_data_mesh-1.3.0/docs/images/tutorial/tutorial-overview.gif +0 -0
  44. serverless_data_mesh-1.3.0/docs/images/vaquar-pattern-proprietary-pvdm.png +0 -0
  45. serverless_data_mesh-1.3.0/docs/images/veridata-vrp-chunk-proof.png +0 -0
  46. serverless_data_mesh-1.3.0/docs/lambda-managed-instances.md +65 -0
  47. serverless_data_mesh-1.3.0/docs/observability-production.md +62 -0
  48. serverless_data_mesh-1.3.0/docs/portable-multi-cloud.md +24 -0
  49. serverless_data_mesh-1.3.0/docs/roadmap-pvdm-a-agentic.md +97 -0
  50. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/terraform-guide.md +12 -9
  51. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/vaquar-pattern.md +71 -10
  52. serverless_data_mesh-1.3.0/docs/visual-tutorial.md +64 -0
  53. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/why-serverless-data-mesh.md +9 -9
  54. serverless_data_mesh-1.3.0/examples/__init__.py +1 -0
  55. serverless_data_mesh-1.3.0/examples/domain_writer/__init__.py +1 -0
  56. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/domain_writer/handler.py +13 -5
  57. serverless_data_mesh-1.3.0/examples/domain_writer/io.py +72 -0
  58. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/domain_writer/spark_io.py +2 -2
  59. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/domain_writer/workload.py +3 -2
  60. serverless_data_mesh-1.3.0/examples/durable-compute/README.md +53 -0
  61. serverless_data_mesh-1.3.0/examples/durable-compute/terraform.tfvars.example +20 -0
  62. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/spark/orders_readers.example.py +2 -1
  63. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/tutorials/walkthrough.py +1 -1
  64. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/README.md +18 -6
  65. serverless_data_mesh-1.3.0/infrastructure/terraform/environments/dev/main.tf +179 -0
  66. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/dev/terraform.tfvars.example +3 -1
  67. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/medallion/main.tf +62 -19
  68. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/medallion/outputs.tf +15 -4
  69. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/medallion/terraform.tfvars.example +9 -1
  70. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/medallion/variables.tf +44 -5
  71. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/producer/main.tf +24 -3
  72. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/producer/terraform.tfvars.example +6 -1
  73. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/prod/main.tf +70 -19
  74. serverless_data_mesh-1.3.0/infrastructure/terraform/environments/prod/outputs.tf +76 -0
  75. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/prod/terraform.tfvars.example +18 -7
  76. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/prod/variables.tf +55 -6
  77. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/iam/main.tf +79 -0
  78. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/iam/variables.tf +51 -0
  79. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/lambda/main.tf +22 -3
  80. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/lambda/outputs.tf +7 -2
  81. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/lambda/variables.tf +136 -0
  82. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/lambda-fleet/main.tf +110 -0
  83. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/lambda-fleet/outputs.tf +25 -0
  84. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/monitoring/dashboard.tf +118 -6
  85. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/monitoring/main.tf +62 -2
  86. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/monitoring/outputs.tf +3 -0
  87. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/monitoring/variables.tf +24 -0
  88. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/sns/main.tf +27 -0
  89. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/sns/outputs.tf +13 -0
  90. serverless_data_mesh-1.3.0/infrastructure/terraform/modules/sns/variables.tf +40 -0
  91. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/stepfunctions/variables.tf +5 -4
  92. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/storage/main.tf +5 -14
  93. serverless_data_mesh-1.3.0/infrastructure/terraform/scripts/package_lambda.ps1 +112 -0
  94. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/scripts/package_lambda.sh +18 -2
  95. serverless_data_mesh-1.3.0/integrations/backstage/README.md +31 -0
  96. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/pyproject.toml +13 -0
  97. serverless_data_mesh-1.3.0/schemas/sdm-v1-dataproductpipeline.json +64 -0
  98. serverless_data_mesh-1.3.0/schemas/sdm-v1-medallionmesh.json +75 -0
  99. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/__init__.py +40 -3
  100. serverless_data_mesh-1.3.0/src/serverless_data_mesh/attestation/__init__.py +19 -0
  101. serverless_data_mesh-1.3.0/src/serverless_data_mesh/attestation/pvdma.py +217 -0
  102. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/catalog/glue_connector.py +1 -1
  103. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/catalog/glue_rest.py +3 -1
  104. serverless_data_mesh-1.3.0/src/serverless_data_mesh/catalog_export/__init__.py +5 -0
  105. serverless_data_mesh-1.3.0/src/serverless_data_mesh/catalog_export/backstage.py +132 -0
  106. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/cli.py +169 -0
  107. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/contract.py +5 -13
  108. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/emit.py +31 -7
  109. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/loader.py +1 -4
  110. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/medallion.py +1 -1
  111. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/medallion_emit.py +114 -12
  112. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/medallion_validate.py +3 -9
  113. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/runtime.py +4 -7
  114. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/wizard.py +4 -3
  115. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/config.py +3 -3
  116. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/dashboard/cloudwatch.py +3 -5
  117. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/dashboard/trust.py +11 -6
  118. serverless_data_mesh-1.3.0/src/serverless_data_mesh/deploy/__init__.py +5 -0
  119. serverless_data_mesh-1.3.0/src/serverless_data_mesh/deploy/runner.py +139 -0
  120. serverless_data_mesh-1.3.0/src/serverless_data_mesh/execution_timeouts.py +161 -0
  121. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/governance/consumer_sla.py +9 -6
  122. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/lineage/openlineage.py +2 -2
  123. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/local/runtime.py +176 -13
  124. serverless_data_mesh-1.3.0/src/serverless_data_mesh/metrics/__init__.py +5 -0
  125. serverless_data_mesh-1.3.0/src/serverless_data_mesh/metrics/mesh_trust.py +72 -0
  126. serverless_data_mesh-1.3.0/src/serverless_data_mesh/observability/__init__.py +19 -0
  127. serverless_data_mesh-1.3.0/src/serverless_data_mesh/observability/sns_notify.py +121 -0
  128. serverless_data_mesh-1.3.0/src/serverless_data_mesh/observability/structured.py +15 -0
  129. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/orchestration/canary.py +2 -1
  130. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/orchestration/coordinator.py +163 -10
  131. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/orchestration/durable_steps.py +46 -2
  132. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/orchestration/reprocess.py +4 -7
  133. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/orchestration/state.py +6 -0
  134. serverless_data_mesh-1.3.0/src/serverless_data_mesh/portable/__init__.py +17 -0
  135. serverless_data_mesh-1.3.0/src/serverless_data_mesh/portable/cloud.py +104 -0
  136. serverless_data_mesh-1.3.0/src/serverless_data_mesh/pvdm_copyright.py +40 -0
  137. serverless_data_mesh-1.3.0/src/serverless_data_mesh/py.typed +1 -0
  138. serverless_data_mesh-1.3.0/src/serverless_data_mesh/readers/__init__.py +21 -0
  139. serverless_data_mesh-1.3.0/src/serverless_data_mesh/readers/s3_bronze.py +161 -0
  140. serverless_data_mesh-1.3.0/src/serverless_data_mesh/readers/upstream_parquet.py +125 -0
  141. serverless_data_mesh-1.3.0/src/serverless_data_mesh/rules/__init__.py +14 -0
  142. serverless_data_mesh-1.3.0/src/serverless_data_mesh/rules/gate.py +60 -0
  143. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/rules/sparkrules_connector.py +7 -3
  144. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/types/workload.py +4 -3
  145. serverless_data_mesh-1.3.0/src/serverless_data_mesh/ui/__init__.py +5 -0
  146. serverless_data_mesh-1.3.0/src/serverless_data_mesh/ui/data.py +321 -0
  147. serverless_data_mesh-1.3.0/src/serverless_data_mesh/ui/server.py +163 -0
  148. serverless_data_mesh-1.3.0/src/serverless_data_mesh/ui/static/app.css +209 -0
  149. serverless_data_mesh-1.3.0/src/serverless_data_mesh/ui/static/app.js +198 -0
  150. serverless_data_mesh-1.3.0/src/serverless_data_mesh/ui/static/index.html +148 -0
  151. serverless_data_mesh-1.3.0/src/serverless_data_mesh/verification/__init__.py +55 -0
  152. serverless_data_mesh-1.3.0/src/serverless_data_mesh/verification/commit_gate.py +258 -0
  153. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/verification/fallback.py +36 -3
  154. serverless_data_mesh-1.3.0/src/serverless_data_mesh/verification/kms_sign.py +123 -0
  155. serverless_data_mesh-1.3.0/src/serverless_data_mesh/verification/nonce_ledger.py +98 -0
  156. serverless_data_mesh-1.3.0/src/serverless_data_mesh/verification/pvdm_primitives.py +252 -0
  157. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/verification/vrp.py +37 -5
  158. serverless_data_mesh-1.3.0/tests/__init__.py +1 -0
  159. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/conftest.py +13 -0
  160. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/eval/test_consumer_safety.py +3 -2
  161. serverless_data_mesh-1.3.0/tests/unit/__init__.py +1 -0
  162. serverless_data_mesh-1.3.0/tests/unit/test_attestation_kms.py +100 -0
  163. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_catalog.py +0 -1
  164. serverless_data_mesh-1.3.0/tests/unit/test_catalog_export.py +31 -0
  165. serverless_data_mesh-1.3.0/tests/unit/test_commit_gate.py +185 -0
  166. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_compile.py +4 -3
  167. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_consumer_sla.py +9 -6
  168. serverless_data_mesh-1.3.0/tests/unit/test_coverage_new_modules.py +330 -0
  169. serverless_data_mesh-1.3.0/tests/unit/test_deploy.py +24 -0
  170. serverless_data_mesh-1.3.0/tests/unit/test_execution_timeouts.py +137 -0
  171. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_medallion.py +7 -9
  172. serverless_data_mesh-1.3.0/tests/unit/test_metrics.py +56 -0
  173. serverless_data_mesh-1.3.0/tests/unit/test_observability.py +45 -0
  174. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_openlineage.py +9 -6
  175. serverless_data_mesh-1.3.0/tests/unit/test_reference_readers.py +37 -0
  176. serverless_data_mesh-1.3.0/tests/unit/test_schemas.py +35 -0
  177. serverless_data_mesh-1.3.0/tests/unit/test_sns_notify.py +100 -0
  178. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_sparkrules_connector.py +0 -1
  179. serverless_data_mesh-1.3.0/tests/unit/test_ui_server.py +97 -0
  180. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_verification.py +4 -1
  181. serverless_data_mesh-1.3.0/tests/unit/test_version.py +22 -0
  182. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_wizard.py +8 -7
  183. serverless_data_mesh-1.0.0/README.md +0 -481
  184. serverless_data_mesh-1.0.0/VERSION +0 -1
  185. serverless_data_mesh-1.0.0/docs/deployment.md +0 -42
  186. serverless_data_mesh-1.0.0/docs/images/lambda-execution-flow.png +0 -0
  187. serverless_data_mesh-1.0.0/examples/__init__.py +0 -0
  188. serverless_data_mesh-1.0.0/examples/domain_writer/__init__.py +0 -0
  189. serverless_data_mesh-1.0.0/examples/domain_writer/io.py +0 -33
  190. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/dev/main.tf +0 -160
  191. serverless_data_mesh-1.0.0/infrastructure/terraform/environments/prod/outputs.tf +0 -61
  192. serverless_data_mesh-1.0.0/infrastructure/terraform/modules/iam/variables.tf +0 -33
  193. serverless_data_mesh-1.0.0/infrastructure/terraform/modules/lambda/variables.tf +0 -89
  194. serverless_data_mesh-1.0.0/infrastructure/terraform/scripts/package_lambda.ps1 +0 -31
  195. serverless_data_mesh-1.0.0/src/serverless_data_mesh/metrics/__init__.py +0 -5
  196. serverless_data_mesh-1.0.0/src/serverless_data_mesh/metrics/mesh_trust.py +0 -56
  197. serverless_data_mesh-1.0.0/src/serverless_data_mesh/py.typed +0 -0
  198. serverless_data_mesh-1.0.0/src/serverless_data_mesh/rules/__init__.py +0 -8
  199. serverless_data_mesh-1.0.0/src/serverless_data_mesh/verification/__init__.py +0 -21
  200. serverless_data_mesh-1.0.0/tests/__init__.py +0 -0
  201. serverless_data_mesh-1.0.0/tests/unit/__init__.py +0 -0
  202. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/LICENSE +0 -0
  203. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/README.md +0 -0
  204. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/results/2026-06-baseline.json +0 -0
  205. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/run_benchmark.sh +0 -0
  206. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/workloads/100k_rows.py +0 -0
  207. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/workloads/10m_rows.py +0 -0
  208. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/benchmarks/workloads/1m_rows.py +0 -0
  209. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/domain-contracts.md +0 -0
  210. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/glue-connector.md +0 -0
  211. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/serverless-data-mesh-hero.png +0 -0
  212. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/three-account-data-mesh.png +0 -0
  213. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/vaquar-pattern-blog-hero.png +0 -0
  214. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/vaquar-pattern-e2e-journey.png +0 -0
  215. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/vaquar-pattern-invariant.png +0 -0
  216. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/why-sdm-four-phase-connectivity.png +0 -0
  217. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/why-sdm-hero-connectivity.png +0 -0
  218. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/images/why-sdm-trust-gap.png +0 -0
  219. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/mesh-trust-dashboard.md +0 -0
  220. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/metadata-driven-pipeline.md +0 -0
  221. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/pypi.md +0 -0
  222. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/docs/sparkrules-connector.md +0 -0
  223. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/contracts/payments.mesh.pipeline.yaml +0 -0
  224. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/domain_writer/README.md +0 -0
  225. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/domain_writer/rules_io.py +0 -0
  226. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/medallion-e2e/README.md +0 -0
  227. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/medallion-e2e/northstar.mesh.yaml +0 -0
  228. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/multi-domain-orders-payments/README.md +0 -0
  229. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/multi-domain-orders-payments/coordinator_config.yaml +0 -0
  230. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/multi-domain-orders-payments/test_atomicity.py +0 -0
  231. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/README.md +0 -0
  232. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/compile_all.py +0 -0
  233. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/contracts/customers.mesh.pipeline.yaml +0 -0
  234. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/contracts/inventory.mesh.pipeline.yaml +0 -0
  235. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/contracts/orders.mesh.pipeline.yaml +0 -0
  236. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/contracts/payments.mesh.pipeline.yaml +0 -0
  237. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/contracts/shipping.mesh.pipeline.yaml +0 -0
  238. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/mesh-registry.yaml +0 -0
  239. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/retail-mesh/mesh-transactions/daily-close.yaml +0 -0
  240. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/tutorials/README.md +0 -0
  241. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/examples/tutorials/verification_gate_demo.py +0 -0
  242. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/grafana/mesh-trust-dashboard.json +0 -0
  243. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/sam/README.md +0 -0
  244. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/sam/template.yaml +0 -0
  245. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/medallion/providers.tf +0 -0
  246. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/medallion/versions.tf +0 -0
  247. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/README.md +0 -0
  248. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/publisher/main.tf +0 -0
  249. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/publisher/terraform.tfvars.example +0 -0
  250. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/steward/main.tf +0 -0
  251. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/multi-account/steward/terraform.tfvars.example +0 -0
  252. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/prod/providers.tf +0 -0
  253. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/environments/prod/versions.tf +0 -0
  254. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/eventbridge/main.tf +0 -0
  255. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/eventbridge/outputs.tf +0 -0
  256. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/eventbridge/variables.tf +0 -0
  257. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/eventbridge/versions.tf +0 -0
  258. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/governance/main.tf +0 -0
  259. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/governance/versions.tf +0 -0
  260. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/iam/outputs.tf +0 -0
  261. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/iam/versions.tf +0 -0
  262. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/lambda/versions.tf +0 -0
  263. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/medallion-mesh/main.tf +0 -0
  264. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/medallion-mesh/outputs.tf +0 -0
  265. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/messaging/main.tf +0 -0
  266. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/messaging/outputs.tf +0 -0
  267. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/messaging/variables.tf +0 -0
  268. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/messaging/versions.tf +0 -0
  269. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/monitoring/versions.tf +0 -0
  270. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/stepfunctions/main.tf +0 -0
  271. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/stepfunctions/outputs.tf +0 -0
  272. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/stepfunctions/state_machine.asl.json.tpl +0 -0
  273. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/stepfunctions/versions.tf +0 -0
  274. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/storage/outputs.tf +0 -0
  275. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/storage/variables.tf +0 -0
  276. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/infrastructure/terraform/modules/storage/versions.tf +0 -0
  277. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/catalog/__init__.py +0 -0
  278. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/__init__.py +0 -0
  279. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/from_init.py +0 -0
  280. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/compile/validate.py +0 -0
  281. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/dashboard/__init__.py +0 -0
  282. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/exceptions.py +0 -0
  283. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/governance/__init__.py +0 -0
  284. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/lineage/__init__.py +0 -0
  285. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/local/__init__.py +0 -0
  286. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/orchestration/__init__.py +0 -0
  287. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/scaffold/__init__.py +0 -0
  288. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/scaffold/init_domain.py +0 -0
  289. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/templates/medallion-starter.mesh.yaml +0 -0
  290. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/templates/single-pipeline.mesh.yaml +0 -0
  291. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/types/__init__.py +0 -0
  292. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/src/serverless_data_mesh/verification/backend.py +0 -0
  293. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_auto_repair_demo.py +0 -0
  294. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_canary.py +0 -0
  295. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_cli_scaffold.py +0 -0
  296. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_config.py +0 -0
  297. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_example_workload.py +1 -1
  298. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_fallback_verifier.py +0 -0
  299. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_local_runtime.py +0 -0
  300. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_reprocess.py +0 -0
  301. {serverless_data_mesh-1.0.0 → serverless_data_mesh-1.3.0}/tests/unit/test_types.py +0 -0
@@ -64,3 +64,8 @@ agent-transcripts/
64
64
  examples/retail-mesh/generated/
65
65
  examples/medallion-e2e/generated/
66
66
  domains/
67
+ infrastructure/terraform/fixtures/generated-mesh/
68
+
69
+ # Keep VS Code YAML schema mapping
70
+ !.vscode/
71
+ !.vscode/settings.json
@@ -4,6 +4,59 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.3.0] - 2026-09-19
8
+
9
+ ### Added
10
+
11
+ - **Lambda Managed Instances (LMI) opt-in**: segments up to **90 minutes** for async/ESM via `enable_lambda_managed_instances` + capacity provider ARN
12
+ - **`execution_timeouts` module** with unit tests validating on-demand (≤15 min) vs LMI (≤90 min), SFN sync cap, IceGuard rollback scaling, and durable budget coherence
13
+ - **Docs**: `docs/lambda-managed-instances.md` — industry-standard 15–90 min segments with IceGuard/VRP Iceberg safety
14
+
15
+ ### Changed
16
+
17
+ - Terraform lambda module / prod / medallion / multi-account: timeout ceiling **900 or 5400** by capacity mode; SFN invoke wait capped at sync 15 min
18
+ - README / architecture / terraform guides: dual clocks + LMI; IceGuard prevents corrupt Iceberg publication
19
+ - PyPI download badges: use live **pypistats** monthly/weekly counts (shields `pypi/dm` and pe.py static badges were unreliable)
20
+
21
+ ## [1.2.0] - 2026-07-21
22
+
23
+ ### Added
24
+
25
+ - **PVDM-A Decision Attestation** + CLI `attest` + coordinator/local wiring
26
+ - **Optional KMS VRP envelopes** (`VRP_KMS_KEY_ID`)
27
+ - **Pre-physical rules gate** (`SDM_RULES_GATE` / SparkRules)
28
+ - **Mesh control center UI** with dashboards, `/walkthrough` GIF demo, one-click demos
29
+ - **README GIF walkthrough** + durable-compute example + Docker image (`ghcr.io`)
30
+ - **100% coverage gate** for attestation / kms_sign / rules.gate / ui.data (`scripts/coverage_gate.py`)
31
+
32
+ ### Fixed
33
+
34
+ - **Lambda VERSION path**: `__init__.py` tries `serverless_data_mesh/VERSION`, repo root, and metadata; wheel bundles `VERSION` in package
35
+ - **IAM**: `cloudwatch:PutMetricData` for `ServerlessDataMesh*` namespace on domain writer role
36
+ - **Terraform storage**: lifecycle `for_each` uses static bucket keys (not computed `.id` map keys)
37
+ - **Metrics**: `SDM_METRICS_ENABLED` / `SDM_DISABLE_METRICS` opt-out; PutMetricData failures are non-fatal
38
+ - **Lambda packaging**: `SDM_PIPELINE_SRC` overlays compiled `handler.py` at zip root; `handler.lambda_handler` in manifest and Terraform
39
+ - **Observability:** structured `pvdm_outcome` JSON logs; LocalPVDMRuntime S3 proofs when `VRP_PROOF_BUCKET` set
40
+ - **Monitoring:** ops dashboard widgets (invocations, errors, duration, DLQ); DLQ alarm; JSON log metric filters
41
+ - **Scripts:** `aws_observability_smoke.sh`, `aws_dlq_smoke_test.sh`; [observability-production.md](docs/observability-production.md)
42
+
43
+ ## [1.1.0] - 2026-06-14
44
+
45
+ Enterprise completeness: reference readers, per-layer Lambda fleet, deploy CLI, Backstage, schemas, UI, benchmarks, multi-cloud stubs.
46
+
47
+ ### Added
48
+
49
+ - **Reference readers**: S3 bronze landing + upstream Parquet (`serverless_data_mesh.readers`)
50
+ - **Per-layer Lambda fleet** Terraform module (`lambda-fleet`) + `layer_lambda.manifest.json` from compile
51
+ - **`serverless-data-mesh deploy`** — apply + terraform + optional Step Functions start
52
+ - **`serverless-data-mesh catalog export`** — Backstage `catalog-info.yaml` entities
53
+ - **`serverless-data-mesh ui`** — local mesh control panel (HTTP)
54
+ - **JSON Schema** for `sdm/v1` contracts + VS Code YAML autocomplete
55
+ - **Portable cloud** adapters (AWS production, GCP/Azure stubs)
56
+ - **Docs**: `docs/first-mesh-on-aws.md` (5-minute guide)
57
+ - **CI**: medallion Terraform validate, local benchmark, smoke-aws + benchmark workflows
58
+ - **Benchmarks**: `run_local_benchmark.py`, `run_aws_benchmark.py`
59
+
7
60
  ## [1.0.0] - 2026-06-14
8
61
 
9
62
  Production release: metadata-driven medallion mesh, zero-friction CLI, and Terraform deploy path.
@@ -0,0 +1,14 @@
1
+ Vaquar Pattern (PVDM)
2
+ Copyright © 2024–2026 Vaquar Khan. All rights reserved.
3
+
4
+ PVDM (Physical · Verify · Durable · Metadata) and the Vaquar Pattern are
5
+ proprietary architectural methods of Vaquar Khan. The method name, operational
6
+ acronym, and publication invariant (commit_metadata ⟹ VRP = PASS) may not be
7
+ rebranded or claimed as an independent invention without attribution to the
8
+ inventor.
9
+
10
+ This repository's reference implementation (serverless-data-mesh) is licensed
11
+ under the Apache License 2.0. Use of the open-source code does not transfer
12
+ ownership of the proprietary method.
13
+
14
+ See docs/vaquar-pattern.md for the canonical method specification.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: serverless-data-mesh
3
- Version: 1.0.0
3
+ Version: 1.3.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,6 +10,7 @@ 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
+ License-File: NOTICE
13
14
  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
15
  Classifier: Development Status :: 5 - Production/Stable
15
16
  Classifier: Intended Audience :: Developers
@@ -62,6 +63,8 @@ An open Python framework for **domain-oriented**, **federated data mesh** teams
62
63
 
63
64
  Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)** (PVDM): Physical → Verify → Durable → Metadata. Invariant: `commit_metadata ⟹ VRP = PASS`.
64
65
 
66
+ **Paper:** [arXiv:2608.14643](https://arxiv.org/abs/2608.14643) · **Reference gate:** [Proof-gated-publication-PVDM](https://github.com/vaquarkhan/Proof-gated-publication-PVDM)
67
+
65
68
  ## Install
66
69
 
67
70
  ```bash
@@ -83,7 +86,7 @@ pip install "serverless-data-mesh[dev]" # pytest, ruff, pre-commit
83
86
  |---------|--------|
84
87
  | Silent data loss on backfill | VRP `FAIL` blocks Iceberg snapshot |
85
88
  | "Job succeeded" is not proof | Cryptographic multiset proof per chunk |
86
- | Lambda 15-minute limit | Durable Execution + Step Functions (90+ min) |
89
+ | Lambda 15-minute limit | Durable + IceGuard (any total runtime); optional LMI segments up to 90 min async |
87
90
  | Retry duplicates data | IceGuard rollback + `workload_id` checkpoints |
88
91
  | Central ETL bottleneck | Per-domain Lambda writer + transaction boundary |
89
92
  | Federated blast radius | Producer · Steward · Publisher accounts |
@@ -136,6 +139,8 @@ outcome = coordinator.run_workload(workload)
136
139
  ## Documentation
137
140
 
138
141
  - [GitHub README](https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme)
142
+ - [PVDM paper (arXiv:2608.14643)](https://arxiv.org/abs/2608.14643)
143
+ - [PVDM reference gate](https://github.com/vaquarkhan/Proof-gated-publication-PVDM)
139
144
  - [Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)
140
145
  - [Getting started](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/getting-started.md)
141
146
  - [PyPI guide](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/pypi.md)
@@ -10,6 +10,8 @@ An open Python framework for **domain-oriented**, **federated data mesh** teams
10
10
 
11
11
  Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)** (PVDM): Physical → Verify → Durable → Metadata. Invariant: `commit_metadata ⟹ VRP = PASS`.
12
12
 
13
+ **Paper:** [arXiv:2608.14643](https://arxiv.org/abs/2608.14643) · **Reference gate:** [Proof-gated-publication-PVDM](https://github.com/vaquarkhan/Proof-gated-publication-PVDM)
14
+
13
15
  ## Install
14
16
 
15
17
  ```bash
@@ -31,7 +33,7 @@ pip install "serverless-data-mesh[dev]" # pytest, ruff, pre-commit
31
33
  |---------|--------|
32
34
  | Silent data loss on backfill | VRP `FAIL` blocks Iceberg snapshot |
33
35
  | "Job succeeded" is not proof | Cryptographic multiset proof per chunk |
34
- | Lambda 15-minute limit | Durable Execution + Step Functions (90+ min) |
36
+ | Lambda 15-minute limit | Durable + IceGuard (any total runtime); optional LMI segments up to 90 min async |
35
37
  | Retry duplicates data | IceGuard rollback + `workload_id` checkpoints |
36
38
  | Central ETL bottleneck | Per-domain Lambda writer + transaction boundary |
37
39
  | Federated blast radius | Producer · Steward · Publisher accounts |
@@ -84,6 +86,8 @@ outcome = coordinator.run_workload(workload)
84
86
  ## Documentation
85
87
 
86
88
  - [GitHub README](https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme)
89
+ - [PVDM paper (arXiv:2608.14643)](https://arxiv.org/abs/2608.14643)
90
+ - [PVDM reference gate](https://github.com/vaquarkhan/Proof-gated-publication-PVDM)
87
91
  - [Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)
88
92
  - [Getting started](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/getting-started.md)
89
93
  - [PyPI guide](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/pypi.md)