datadoom 0.1.0.dev0__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 (298) hide show
  1. datadoom-0.1.0.dev0/.claude/settings.local.json +212 -0
  2. datadoom-0.1.0.dev0/.dockerignore +29 -0
  3. datadoom-0.1.0.dev0/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  4. datadoom-0.1.0.dev0/.github/workflows/ci.yml +82 -0
  5. datadoom-0.1.0.dev0/.github/workflows/docs.yml +50 -0
  6. datadoom-0.1.0.dev0/.github/workflows/release.yml +144 -0
  7. datadoom-0.1.0.dev0/.github/workflows/repro-matrix.yml +68 -0
  8. datadoom-0.1.0.dev0/.gitignore +44 -0
  9. datadoom-0.1.0.dev0/.pre-commit-config.yaml +25 -0
  10. datadoom-0.1.0.dev0/.tmp_pdir.txt +1 -0
  11. datadoom-0.1.0.dev0/CHANGELOG.md +76 -0
  12. datadoom-0.1.0.dev0/CLAUDE.md +149 -0
  13. datadoom-0.1.0.dev0/CODE_OF_CONDUCT.md +40 -0
  14. datadoom-0.1.0.dev0/CONTRIBUTING.md +61 -0
  15. datadoom-0.1.0.dev0/Dockerfile +49 -0
  16. datadoom-0.1.0.dev0/Docs/Advanced_System_Documents.md +363 -0
  17. datadoom-0.1.0.dev0/Docs/Cost_Estimation_Model.md +357 -0
  18. datadoom-0.1.0.dev0/Docs/DB_Schema&Indexing.md +395 -0
  19. datadoom-0.1.0.dev0/Docs/DataDoom_Critical_Analysis_and_Recommended_Architecture.md +205 -0
  20. datadoom-0.1.0.dev0/Docs/DataDoom_PRD_v2_OpenSource.md +281 -0
  21. datadoom-0.1.0.dev0/Docs/Engineering_Roadmap.md +379 -0
  22. datadoom-0.1.0.dev0/Docs/File_Structure.md +682 -0
  23. datadoom-0.1.0.dev0/Docs/HackForge AI User Flow Guide.md +175 -0
  24. datadoom-0.1.0.dev0/Docs/HackForge AI_ AI-Accelerated Engineering Playbook.md +89 -0
  25. datadoom-0.1.0.dev0/Docs/Implementation_Guide.md +373 -0
  26. datadoom-0.1.0.dev0/Docs/Infrastructure_Summary.md +388 -0
  27. datadoom-0.1.0.dev0/Docs/Internal_Data_Models.md +341 -0
  28. datadoom-0.1.0.dev0/Docs/Kafka_Event_Contract.md +368 -0
  29. datadoom-0.1.0.dev0/Docs/Language_Specification.md +309 -0
  30. datadoom-0.1.0.dev0/Docs/Learning_Guide.md +354 -0
  31. datadoom-0.1.0.dev0/Docs/Mathematical_Algorithm_Definitions.md +347 -0
  32. datadoom-0.1.0.dev0/Docs/Microservices_API_Contract.md +336 -0
  33. datadoom-0.1.0.dev0/Docs/Mulit_Tenant_Isolation.md +340 -0
  34. datadoom-0.1.0.dev0/Docs/Open_API_Scheme.md +362 -0
  35. datadoom-0.1.0.dev0/Docs/PRD.md +226 -0
  36. datadoom-0.1.0.dev0/Docs/Portobuff_Definitions.md +419 -0
  37. datadoom-0.1.0.dev0/Docs/SLA_SLO_RateLimiting.md +349 -0
  38. datadoom-0.1.0.dev0/Docs/Security_Compliance.md +403 -0
  39. datadoom-0.1.0.dev0/Docs/Techincal_Architecture.md +370 -0
  40. datadoom-0.1.0.dev0/GOVERNANCE.md +31 -0
  41. datadoom-0.1.0.dev0/LICENSE +202 -0
  42. datadoom-0.1.0.dev0/PKG-INFO +143 -0
  43. datadoom-0.1.0.dev0/README.md +80 -0
  44. datadoom-0.1.0.dev0/SECURITY.md +22 -0
  45. datadoom-0.1.0.dev0/design/UI_Design_Prompts.md +702 -0
  46. datadoom-0.1.0.dev0/docs_site/architecture.md +63 -0
  47. datadoom-0.1.0.dev0/docs_site/authoring.md +9 -0
  48. datadoom-0.1.0.dev0/docs_site/examples.md +62 -0
  49. datadoom-0.1.0.dev0/docs_site/index.md +79 -0
  50. datadoom-0.1.0.dev0/docs_site/llm-reference.md +16 -0
  51. datadoom-0.1.0.dev0/docs_site/plugins.md +49 -0
  52. datadoom-0.1.0.dev0/docs_site/spec-reference.md +48 -0
  53. datadoom-0.1.0.dev0/docs_v2/00_README_Index.md +113 -0
  54. datadoom-0.1.0.dev0/docs_v2/01_PRD.md +189 -0
  55. datadoom-0.1.0.dev0/docs_v2/02_User_Flow_Guide.md +191 -0
  56. datadoom-0.1.0.dev0/docs_v2/03_Technical_Architecture.md +181 -0
  57. datadoom-0.1.0.dev0/docs_v2/04_DataDoom_Spec_Reference.md +338 -0
  58. datadoom-0.1.0.dev0/docs_v2/05_Mathematical_Algorithm_Definitions.md +191 -0
  59. datadoom-0.1.0.dev0/docs_v2/06_Internal_Data_Models.md +240 -0
  60. datadoom-0.1.0.dev0/docs_v2/07_Database_Schema.md +174 -0
  61. datadoom-0.1.0.dev0/docs_v2/08_API_Contract.md +212 -0
  62. datadoom-0.1.0.dev0/docs_v2/09_Plugin_System.md +162 -0
  63. datadoom-0.1.0.dev0/docs_v2/10_File_Structure.md +168 -0
  64. datadoom-0.1.0.dev0/docs_v2/11_Language_Technology_Specification.md +132 -0
  65. datadoom-0.1.0.dev0/docs_v2/12_Resource_Estimation_Model.md +134 -0
  66. datadoom-0.1.0.dev0/docs_v2/13_Testing_and_Reproducibility_Strategy.md +114 -0
  67. datadoom-0.1.0.dev0/docs_v2/14_Security_and_Privacy.md +101 -0
  68. datadoom-0.1.0.dev0/docs_v2/15_Open_Source_Governance.md +114 -0
  69. datadoom-0.1.0.dev0/docs_v2/16_Engineering_Roadmap.md +139 -0
  70. datadoom-0.1.0.dev0/docs_v2/17_Implementation_Guide.md +161 -0
  71. datadoom-0.1.0.dev0/docs_v2/18_AI_Accelerated_Engineering_Playbook.md +111 -0
  72. datadoom-0.1.0.dev0/docs_v2/19_Learning_Guide.md +144 -0
  73. datadoom-0.1.0.dev0/docs_v2/20_YAML_Authoring_Guide.md +718 -0
  74. datadoom-0.1.0.dev0/docs_v2/21_LLM_Spec_Authoring_Reference.md +365 -0
  75. datadoom-0.1.0.dev0/docs_v2/22_Release_and_Publishing_Runbook.md +177 -0
  76. datadoom-0.1.0.dev0/examples/causal-fraud.datadoom.yaml +41 -0
  77. datadoom-0.1.0.dev0/examples/difficulty-credit.datadoom.yaml +62 -0
  78. datadoom-0.1.0.dev0/examples/failure-fraud.datadoom.yaml +65 -0
  79. datadoom-0.1.0.dev0/examples/people-realistic.datadoom.yaml +49 -0
  80. datadoom-0.1.0.dev0/examples/tabular-basic.datadoom.yaml +44 -0
  81. datadoom-0.1.0.dev0/examples/timeseries-sensor.datadoom.yaml +37 -0
  82. datadoom-0.1.0.dev0/frontend/index.html +14 -0
  83. datadoom-0.1.0.dev0/frontend/package-lock.json +3375 -0
  84. datadoom-0.1.0.dev0/frontend/package.json +34 -0
  85. datadoom-0.1.0.dev0/frontend/postcss.config.js +6 -0
  86. datadoom-0.1.0.dev0/frontend/src/App.tsx +36 -0
  87. datadoom-0.1.0.dev0/frontend/src/components/CausalGraphEditor.tsx +363 -0
  88. datadoom-0.1.0.dev0/frontend/src/components/CausalGraphView.tsx +197 -0
  89. datadoom-0.1.0.dev0/frontend/src/components/CausalInspector.tsx +391 -0
  90. datadoom-0.1.0.dev0/frontend/src/components/ColumnGuideView.tsx +235 -0
  91. datadoom-0.1.0.dev0/frontend/src/components/ComparisonView.tsx +474 -0
  92. datadoom-0.1.0.dev0/frontend/src/components/ConfirmHost.tsx +49 -0
  93. datadoom-0.1.0.dev0/frontend/src/components/DifficultyConfigurator.tsx +251 -0
  94. datadoom-0.1.0.dev0/frontend/src/components/DifficultyView.tsx +204 -0
  95. datadoom-0.1.0.dev0/frontend/src/components/ErrorBoundary.tsx +63 -0
  96. datadoom-0.1.0.dev0/frontend/src/components/ExportModal.tsx +109 -0
  97. datadoom-0.1.0.dev0/frontend/src/components/FailureBadges.tsx +68 -0
  98. datadoom-0.1.0.dev0/frontend/src/components/FailureConfigurator.tsx +286 -0
  99. datadoom-0.1.0.dev0/frontend/src/components/FailureInspector.tsx +393 -0
  100. datadoom-0.1.0.dev0/frontend/src/components/GenerationsPanel.tsx +273 -0
  101. datadoom-0.1.0.dev0/frontend/src/components/Histogram.tsx +37 -0
  102. datadoom-0.1.0.dev0/frontend/src/components/Inspector.tsx +659 -0
  103. datadoom-0.1.0.dev0/frontend/src/components/Layout.tsx +204 -0
  104. datadoom-0.1.0.dev0/frontend/src/components/Modal.tsx +134 -0
  105. datadoom-0.1.0.dev0/frontend/src/components/OverviewView.tsx +235 -0
  106. datadoom-0.1.0.dev0/frontend/src/components/SpecDrawer.tsx +63 -0
  107. datadoom-0.1.0.dev0/frontend/src/components/StageStepper.tsx +62 -0
  108. datadoom-0.1.0.dev0/frontend/src/components/TableCanvas.tsx +473 -0
  109. datadoom-0.1.0.dev0/frontend/src/components/Toaster.tsx +43 -0
  110. datadoom-0.1.0.dev0/frontend/src/components/ui.tsx +362 -0
  111. datadoom-0.1.0.dev0/frontend/src/lib/api.ts +115 -0
  112. datadoom-0.1.0.dev0/frontend/src/lib/audit.ts +134 -0
  113. datadoom-0.1.0.dev0/frontend/src/lib/causal.ts +127 -0
  114. datadoom-0.1.0.dev0/frontend/src/lib/clsx.ts +6 -0
  115. datadoom-0.1.0.dev0/frontend/src/lib/difficulty.ts +103 -0
  116. datadoom-0.1.0.dev0/frontend/src/lib/failures.ts +437 -0
  117. datadoom-0.1.0.dev0/frontend/src/lib/runSocket.ts +61 -0
  118. datadoom-0.1.0.dev0/frontend/src/lib/sampling.ts +79 -0
  119. datadoom-0.1.0.dev0/frontend/src/lib/schemaForm.tsx +103 -0
  120. datadoom-0.1.0.dev0/frontend/src/lib/specDefaults.ts +36 -0
  121. datadoom-0.1.0.dev0/frontend/src/lib/summary.ts +167 -0
  122. datadoom-0.1.0.dev0/frontend/src/lib/types.ts +512 -0
  123. datadoom-0.1.0.dev0/frontend/src/lib/useHistory.ts +123 -0
  124. datadoom-0.1.0.dev0/frontend/src/lib/viewLayout.ts +25 -0
  125. datadoom-0.1.0.dev0/frontend/src/main.tsx +24 -0
  126. datadoom-0.1.0.dev0/frontend/src/pages/Canvas.tsx +735 -0
  127. datadoom-0.1.0.dev0/frontend/src/pages/Dashboard.tsx +520 -0
  128. datadoom-0.1.0.dev0/frontend/src/pages/Placeholder.tsx +27 -0
  129. datadoom-0.1.0.dev0/frontend/src/pages/Plugins.tsx +161 -0
  130. datadoom-0.1.0.dev0/frontend/src/pages/Results.tsx +545 -0
  131. datadoom-0.1.0.dev0/frontend/src/pages/Templates.tsx +141 -0
  132. datadoom-0.1.0.dev0/frontend/src/pages/Tracker.tsx +160 -0
  133. datadoom-0.1.0.dev0/frontend/src/store/chrome.ts +18 -0
  134. datadoom-0.1.0.dev0/frontend/src/store/confirm.ts +48 -0
  135. datadoom-0.1.0.dev0/frontend/src/store/toast.ts +28 -0
  136. datadoom-0.1.0.dev0/frontend/src/store/ui.ts +30 -0
  137. datadoom-0.1.0.dev0/frontend/src/styles.css +160 -0
  138. datadoom-0.1.0.dev0/frontend/tailwind.config.js +63 -0
  139. datadoom-0.1.0.dev0/frontend/tsconfig.json +23 -0
  140. datadoom-0.1.0.dev0/frontend/tsconfig.node.json +12 -0
  141. datadoom-0.1.0.dev0/frontend/tsconfig.node.tsbuildinfo +1 -0
  142. datadoom-0.1.0.dev0/frontend/tsconfig.tsbuildinfo +1 -0
  143. datadoom-0.1.0.dev0/frontend/vite.config.d.ts +2 -0
  144. datadoom-0.1.0.dev0/frontend/vite.config.js +25 -0
  145. datadoom-0.1.0.dev0/frontend/vite.config.ts +26 -0
  146. datadoom-0.1.0.dev0/mkdocs.yml +68 -0
  147. datadoom-0.1.0.dev0/pyproject.toml +225 -0
  148. datadoom-0.1.0.dev0/src/datadoom/__init__.py +23 -0
  149. datadoom-0.1.0.dev0/src/datadoom/adapters/__init__.py +29 -0
  150. datadoom-0.1.0.dev0/src/datadoom/adapters/frameworks.py +94 -0
  151. datadoom-0.1.0.dev0/src/datadoom/adapters/loaders.py +72 -0
  152. datadoom-0.1.0.dev0/src/datadoom/api/__init__.py +11 -0
  153. datadoom-0.1.0.dev0/src/datadoom/api/app.py +109 -0
  154. datadoom-0.1.0.dev0/src/datadoom/api/deps.py +30 -0
  155. datadoom-0.1.0.dev0/src/datadoom/api/errors.py +89 -0
  156. datadoom-0.1.0.dev0/src/datadoom/api/estimate.py +82 -0
  157. datadoom-0.1.0.dev0/src/datadoom/api/routes/__init__.py +7 -0
  158. datadoom-0.1.0.dev0/src/datadoom/api/routes/artifacts.py +147 -0
  159. datadoom-0.1.0.dev0/src/datadoom/api/routes/datasets.py +180 -0
  160. datadoom-0.1.0.dev0/src/datadoom/api/routes/meta.py +45 -0
  161. datadoom-0.1.0.dev0/src/datadoom/api/routes/plugins.py +22 -0
  162. datadoom-0.1.0.dev0/src/datadoom/api/routes/runs.py +144 -0
  163. datadoom-0.1.0.dev0/src/datadoom/api/routes/specs.py +73 -0
  164. datadoom-0.1.0.dev0/src/datadoom/api/routes/templates.py +30 -0
  165. datadoom-0.1.0.dev0/src/datadoom/api/schemas.py +230 -0
  166. datadoom-0.1.0.dev0/src/datadoom/api/serializers.py +143 -0
  167. datadoom-0.1.0.dev0/src/datadoom/api/state.py +24 -0
  168. datadoom-0.1.0.dev0/src/datadoom/api/store_helpers.py +56 -0
  169. datadoom-0.1.0.dev0/src/datadoom/api/ws.py +72 -0
  170. datadoom-0.1.0.dev0/src/datadoom/cli/__init__.py +1 -0
  171. datadoom-0.1.0.dev0/src/datadoom/cli/main.py +313 -0
  172. datadoom-0.1.0.dev0/src/datadoom/config.py +108 -0
  173. datadoom-0.1.0.dev0/src/datadoom/engine/__init__.py +38 -0
  174. datadoom-0.1.0.dev0/src/datadoom/engine/advice.py +289 -0
  175. datadoom-0.1.0.dev0/src/datadoom/engine/audit.py +290 -0
  176. datadoom-0.1.0.dev0/src/datadoom/engine/causal/__init__.py +15 -0
  177. datadoom-0.1.0.dev0/src/datadoom/engine/causal/execute.py +116 -0
  178. datadoom-0.1.0.dev0/src/datadoom/engine/causal/functions.py +116 -0
  179. datadoom-0.1.0.dev0/src/datadoom/engine/causal/graph.py +54 -0
  180. datadoom-0.1.0.dev0/src/datadoom/engine/difficulty/__init__.py +36 -0
  181. datadoom-0.1.0.dev0/src/datadoom/engine/difficulty/calibrate.py +235 -0
  182. datadoom-0.1.0.dev0/src/datadoom/engine/difficulty/knobs.py +171 -0
  183. datadoom-0.1.0.dev0/src/datadoom/engine/difficulty/probes.py +181 -0
  184. datadoom-0.1.0.dev0/src/datadoom/engine/dist/__init__.py +35 -0
  185. datadoom-0.1.0.dev0/src/datadoom/engine/dist/base.py +46 -0
  186. datadoom-0.1.0.dev0/src/datadoom/engine/dist/builtins.py +172 -0
  187. datadoom-0.1.0.dev0/src/datadoom/engine/dist/compliance.py +344 -0
  188. datadoom-0.1.0.dev0/src/datadoom/engine/dist/providers.py +117 -0
  189. datadoom-0.1.0.dev0/src/datadoom/engine/errors.py +32 -0
  190. datadoom-0.1.0.dev0/src/datadoom/engine/export/__init__.py +27 -0
  191. datadoom-0.1.0.dev0/src/datadoom/engine/export/base.py +49 -0
  192. datadoom-0.1.0.dev0/src/datadoom/engine/export/checksums.py +18 -0
  193. datadoom-0.1.0.dev0/src/datadoom/engine/export/csv_exporter.py +34 -0
  194. datadoom-0.1.0.dev0/src/datadoom/engine/export/json_exporter.py +67 -0
  195. datadoom-0.1.0.dev0/src/datadoom/engine/export/metadata.py +58 -0
  196. datadoom-0.1.0.dev0/src/datadoom/engine/export/parquet_exporter.py +45 -0
  197. datadoom-0.1.0.dev0/src/datadoom/engine/failure/__init__.py +18 -0
  198. datadoom-0.1.0.dev0/src/datadoom/engine/failure/apply.py +37 -0
  199. datadoom-0.1.0.dev0/src/datadoom/engine/failure/base.py +116 -0
  200. datadoom-0.1.0.dev0/src/datadoom/engine/failure/modes.py +442 -0
  201. datadoom-0.1.0.dev0/src/datadoom/engine/pipeline.py +418 -0
  202. datadoom-0.1.0.dev0/src/datadoom/engine/profile.py +327 -0
  203. datadoom-0.1.0.dev0/src/datadoom/engine/progress.py +14 -0
  204. datadoom-0.1.0.dev0/src/datadoom/engine/reference.py +338 -0
  205. datadoom-0.1.0.dev0/src/datadoom/engine/reports.py +206 -0
  206. datadoom-0.1.0.dev0/src/datadoom/engine/rng.py +79 -0
  207. datadoom-0.1.0.dev0/src/datadoom/engine/spec/__init__.py +45 -0
  208. datadoom-0.1.0.dev0/src/datadoom/engine/spec/hashing.py +57 -0
  209. datadoom-0.1.0.dev0/src/datadoom/engine/spec/models.py +238 -0
  210. datadoom-0.1.0.dev0/src/datadoom/engine/spec/validate.py +345 -0
  211. datadoom-0.1.0.dev0/src/datadoom/engine/timeseries.py +88 -0
  212. datadoom-0.1.0.dev0/src/datadoom/jobs/__init__.py +14 -0
  213. datadoom-0.1.0.dev0/src/datadoom/jobs/progress.py +155 -0
  214. datadoom-0.1.0.dev0/src/datadoom/jobs/worker.py +162 -0
  215. datadoom-0.1.0.dev0/src/datadoom/plugin.py +35 -0
  216. datadoom-0.1.0.dev0/src/datadoom/plugins/__init__.py +47 -0
  217. datadoom-0.1.0.dev0/src/datadoom/plugins/contracts.py +72 -0
  218. datadoom-0.1.0.dev0/src/datadoom/plugins/loader.py +125 -0
  219. datadoom-0.1.0.dev0/src/datadoom/plugins/registry.py +214 -0
  220. datadoom-0.1.0.dev0/src/datadoom/plugins/scaffold.py +434 -0
  221. datadoom-0.1.0.dev0/src/datadoom/store/__init__.py +47 -0
  222. datadoom-0.1.0.dev0/src/datadoom/store/artifacts.py +67 -0
  223. datadoom-0.1.0.dev0/src/datadoom/store/db.py +104 -0
  224. datadoom-0.1.0.dev0/src/datadoom/store/migrations/__init__.py +0 -0
  225. datadoom-0.1.0.dev0/src/datadoom/store/migrations/env.py +53 -0
  226. datadoom-0.1.0.dev0/src/datadoom/store/migrations/script.py.mako +24 -0
  227. datadoom-0.1.0.dev0/src/datadoom/store/migrations/versions/0001_init.py +149 -0
  228. datadoom-0.1.0.dev0/src/datadoom/store/migrations/versions/0002_report_mutual_information.py +23 -0
  229. datadoom-0.1.0.dev0/src/datadoom/store/migrations/versions/0003_run_name.py +23 -0
  230. datadoom-0.1.0.dev0/src/datadoom/store/migrations/versions/0004_report_profile.py +24 -0
  231. datadoom-0.1.0.dev0/src/datadoom/store/models.py +170 -0
  232. datadoom-0.1.0.dev0/src/datadoom/store/repositories.py +279 -0
  233. datadoom-0.1.0.dev0/src/datadoom/templates/__init__.py +239 -0
  234. datadoom-0.1.0.dev0/src/datadoom/templates/ab_test.datadoom.yaml +46 -0
  235. datadoom-0.1.0.dev0/src/datadoom/templates/clinical_deterioration.datadoom.yaml +124 -0
  236. datadoom-0.1.0.dev0/src/datadoom/templates/credit_default_challenge.datadoom.yaml +147 -0
  237. datadoom-0.1.0.dev0/src/datadoom/templates/customer_churn.datadoom.yaml +60 -0
  238. datadoom-0.1.0.dev0/src/datadoom/templates/ecommerce_orders.datadoom.yaml +46 -0
  239. datadoom-0.1.0.dev0/src/datadoom/templates/fraud_detection.datadoom.yaml +57 -0
  240. datadoom-0.1.0.dev0/src/datadoom/templates/hospital_readmission.datadoom.yaml +61 -0
  241. datadoom-0.1.0.dev0/src/datadoom/templates/insurance_claims.datadoom.yaml +43 -0
  242. datadoom-0.1.0.dev0/src/datadoom/templates/iot_sensors.datadoom.yaml +44 -0
  243. datadoom-0.1.0.dev0/src/datadoom/templates/people_directory.datadoom.yaml +56 -0
  244. datadoom-0.1.0.dev0/src/datadoom/templates/predictive_maintenance.datadoom.yaml +107 -0
  245. datadoom-0.1.0.dev0/src/datadoom/templates/telecom_churn_challenge.datadoom.yaml +125 -0
  246. datadoom-0.1.0.dev0/src/datadoom/version.py +3 -0
  247. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/index-V8VAuTJG.js +445 -0
  248. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/index-doRjyG5s.css +1 -0
  249. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  250. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  251. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  252. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  253. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  254. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  255. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  256. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  257. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  258. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  259. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  260. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  261. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/space-grotesk-latin-ext-wght-normal-D9tNdqV9.woff2 +0 -0
  262. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/space-grotesk-latin-wght-normal-BhU9QXUp.woff2 +0 -0
  263. datadoom-0.1.0.dev0/src/datadoom/webdist/assets/space-grotesk-vietnamese-wght-normal-D0rl6rjA.woff2 +0 -0
  264. datadoom-0.1.0.dev0/src/datadoom/webdist/index.html +15 -0
  265. datadoom-0.1.0.dev0/status.md +564 -0
  266. datadoom-0.1.0.dev0/testing_guide.md +1514 -0
  267. datadoom-0.1.0.dev0/tests/api/conftest.py +46 -0
  268. datadoom-0.1.0.dev0/tests/api/test_api.py +274 -0
  269. datadoom-0.1.0.dev0/tests/determinism/test_determinism.py +108 -0
  270. datadoom-0.1.0.dev0/tests/golden/checksums.json +3 -0
  271. datadoom-0.1.0.dev0/tests/golden/fraud_numeric.datadoom.yaml +27 -0
  272. datadoom-0.1.0.dev0/tests/perf/test_perf_budget.py +47 -0
  273. datadoom-0.1.0.dev0/tests/plugin_contract/test_plugins.py +257 -0
  274. datadoom-0.1.0.dev0/tests/unit/test_adapters.py +97 -0
  275. datadoom-0.1.0.dev0/tests/unit/test_audit.py +83 -0
  276. datadoom-0.1.0.dev0/tests/unit/test_causal.py +313 -0
  277. datadoom-0.1.0.dev0/tests/unit/test_dataset_audit.py +170 -0
  278. datadoom-0.1.0.dev0/tests/unit/test_difficulty.py +267 -0
  279. datadoom-0.1.0.dev0/tests/unit/test_difficulty_audit.py +92 -0
  280. datadoom-0.1.0.dev0/tests/unit/test_dist.py +128 -0
  281. datadoom-0.1.0.dev0/tests/unit/test_dist_correctness.py +165 -0
  282. datadoom-0.1.0.dev0/tests/unit/test_export.py +34 -0
  283. datadoom-0.1.0.dev0/tests/unit/test_export_formats.py +121 -0
  284. datadoom-0.1.0.dev0/tests/unit/test_failure.py +228 -0
  285. datadoom-0.1.0.dev0/tests/unit/test_failure_audit.py +245 -0
  286. datadoom-0.1.0.dev0/tests/unit/test_hashing.py +62 -0
  287. datadoom-0.1.0.dev0/tests/unit/test_latent.py +138 -0
  288. datadoom-0.1.0.dev0/tests/unit/test_metadata.py +58 -0
  289. datadoom-0.1.0.dev0/tests/unit/test_pipeline.py +115 -0
  290. datadoom-0.1.0.dev0/tests/unit/test_profile.py +201 -0
  291. datadoom-0.1.0.dev0/tests/unit/test_providers.py +88 -0
  292. datadoom-0.1.0.dev0/tests/unit/test_reference.py +79 -0
  293. datadoom-0.1.0.dev0/tests/unit/test_rng.py +45 -0
  294. datadoom-0.1.0.dev0/tests/unit/test_spec_validate.py +151 -0
  295. datadoom-0.1.0.dev0/tests/unit/test_store.py +106 -0
  296. datadoom-0.1.0.dev0/tests/unit/test_templates.py +50 -0
  297. datadoom-0.1.0.dev0/tests/unit/test_timeseries.py +121 -0
  298. datadoom-0.1.0.dev0/tests/unit/test_version.py +15 -0
@@ -0,0 +1,212 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\\\\n\" https://pypi.org/pypi/datadoom/json)",
5
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\\\\n\" https://pypi.org/pypi/data-doom/json)",
6
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\\\\n\" https://github.com/datadoom)",
7
+ "Bash(curl -s \"https://api.github.com/search/repositories?q=datadoom\" -H \"Accept: application/vnd.github+json\")",
8
+ "Bash(curl -s \"https://api.github.com/users/datadoom\")",
9
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\\\\n\" https://test.pypi.org/pypi/datadoom/json)",
10
+ "Bash(git remote *)",
11
+ "Bash(git branch *)",
12
+ "Bash(git -C 'd:/Hack Forge' remote -v)",
13
+ "Bash(git -C 'd:/Hack Forge' branch --show-current)",
14
+ "Bash(git -C 'd:/Hack Forge' status -s)",
15
+ "Bash(git config *)",
16
+ "Bash(py -3.12 --version)",
17
+ "Bash(py -3.11 --version)",
18
+ "Bash(python -m pip --version)",
19
+ "Bash(py -3.12 -m pip --version)",
20
+ "Bash(py -3.12 -c \"import venv; print\\('venv ok'\\)\")",
21
+ "Bash(curl -sL https://www.apache.org/licenses/LICENSE-2.0.txt -o LICENSE)",
22
+ "Bash(pip install *)",
23
+ "Bash(python -c \"import datadoom; print\\('version', datadoom.__version__\\)\")",
24
+ "Bash(datadoom validate *)",
25
+ "Bash(datadoom run *)",
26
+ "Bash(datadoom verify *)",
27
+ "Bash(python -c \"import sys; print\\(sys.executable\\)\")",
28
+ "Bash(pip show *)",
29
+ "Bash(python -c \"import datadoom\")",
30
+ "Bash(python -m pip install -e \".[dev]\" import-linter)",
31
+ "Read(//c/Users/santh/AppData/Local/Python/pythoncore-3.14-64/**)",
32
+ "Bash(\"C:\\\\Users\\\\santh\\\\AppData\\\\Local\\\\Python\\\\pythoncore-3.14-64\\\\python.exe\" --version)",
33
+ "Bash(\"C:\\\\Users\\\\santh\\\\AppData\\\\Local\\\\Python\\\\pythoncore-3.14-64\\\\python.exe\" -c \"import datadoom, numpy, scipy, pandas; print\\('datadoom', datadoom.__version__, '| numpy', numpy.__version__, '| pandas', pandas.__version__\\)\")",
34
+ "Bash(.venv/Scripts/python.exe -m pip install --upgrade pip -q)",
35
+ "Bash(.venv/Scripts/python.exe -m pip install -e \".[dev]\")",
36
+ "Bash(.venv/Scripts/datadoom.exe version *)",
37
+ "Bash(.venv/Scripts/lint-imports.exe)",
38
+ "Bash(echo \"lint-imports exit=$?\")",
39
+ "WebSearch",
40
+ "PowerShell(& \".\\\\.venv\\\\Scripts\\\\python.exe\" -m pytest tests/unit/test_dist_correctness.py tests/unit/test_hashing.py tests/unit/test_spec_validate.py tests/unit/test_metadata.py -q)",
41
+ "PowerShell(& \".\\\\.venv\\\\Scripts\\\\python.exe\" -m pytest -q 2>&1)",
42
+ "Bash(.venv/Scripts/python.exe -m pip install -e \".[dev]\" --quiet)",
43
+ "Bash(.venv/Scripts/python.exe -c \"import fastapi, sqlalchemy, alembic, uvicorn, httpx; print\\('ok', fastapi.__version__, sqlalchemy.__version__\\)\")",
44
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_pipeline.py tests/determinism -q)",
45
+ "Bash(.venv/Scripts/python.exe -c ' *)",
46
+ "Bash(.venv/Scripts/ruff.exe check *)",
47
+ "Bash(.venv/Scripts/mypy.exe)",
48
+ "Bash(.venv/Scripts/python.exe -m pytest tests/api tests/unit/test_store.py -q)",
49
+ "Bash(.venv/Scripts/python.exe -m pytest -q)",
50
+ "Bash(.venv/Scripts/python.exe -m pytest)",
51
+ "Bash(npm --version)",
52
+ "Bash(npm install *)",
53
+ "Bash(npm run *)",
54
+ "Bash(.venv/Scripts/python.exe -m datadoom.cli.main --help)",
55
+ "Bash(.venv/Scripts/python.exe -c \"import networkx; print\\('networkx', networkx.__version__\\)\")",
56
+ "Bash(echo \"exit:$?\")",
57
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_causal.py tests/unit/test_pipeline.py tests/determinism -q)",
58
+ "Bash(.venv/Scripts/datadoom.exe run *)",
59
+ "Bash(.venv/Scripts/datadoom.exe verify *)",
60
+ "Bash(.venv/Scripts/python.exe -c \"import pandas as pd; df=pd.read_csv\\('.tmp_causal/data.csv'\\); print\\(df.head\\(\\)\\); print\\('is_fraud rate', df['is_fraud'].mean\\(\\)\\); print\\('corr age-income', df['age'].corr\\(df['income']\\)\\)\")",
61
+ "Bash(.venv/Scripts/python.exe -m pytest tests/determinism tests/unit/test_causal.py tests/api -q)",
62
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_causal.py -q)",
63
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_causal.py)",
64
+ "Bash(.venv/Scripts/python.exe .tmp_analyze.py)",
65
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_dist.py tests/unit/test_dist_correctness.py tests/unit/test_pipeline.py tests/unit/test_metadata.py tests/api -q)",
66
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_causal.py tests/unit/test_dist.py)",
67
+ "Bash(.venv/Scripts/python.exe -c \"import json; d=json.load\\(open\\('.tmp_run/metadata.json'\\)\\); c=d['compliance']; print\\('score', round\\(c['compliance_score'],3\\), '| applicable', c['applicable_features'], 'of', c['assessed_features']\\); [print\\(' ', f['feature'], f['dist'], 'p=%.3f'%f['p_value'], \\('applicable, '+\\('pass' if f['passed'] else 'FAIL'\\)\\) if f['applicable'] else 'n/a', 'clamped=%.2f'%f['clamped_fraction']\\) for f in c['features']]\")",
68
+ "Bash(rm -rf .tmp_run)",
69
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_dataset_audit.py -q)",
70
+ "Bash(.venv/Scripts/python.exe -c \"from datadoom.engine import load_spec, generate; import numpy as np, pandas as pd; r=generate\\(load_spec\\('examples/tabular-basic.datadoom.yaml'\\), seed=42\\); d=r.frame; print\\('age mean=%.2f std=%.2f min=%d max=%d int=%s'%\\(d['age'].mean\\(\\), d['age'].std\\(\\), d['age'].min\\(\\), d['age'].max\\(\\), str\\(d['age'].dtype\\)\\)\\); print\\('income median=%.0f \\(target %.0f\\) mean=%.0f \\(target %.0f\\)'%\\(d['income'].median\\(\\), np.exp\\(10.5\\), d['income'].mean\\(\\), np.exp\\(10.5+0.4**2/2\\)\\)\\); print\\('visits mean=%.2f var=%.2f \\(lam=3\\)'%\\(d['visits'].mean\\(\\), d['visits'].var\\(\\)\\)\\); print\\('edu '+str\\({c: round\\(\\(d['education']==c\\).mean\\(\\),3\\) for c in ['hs','college','grad']}\\)\\); print\\('member rate=%.3f'%d['is_member'].mean\\(\\)\\); print\\('note tokens %d..%d'%\\(d['note'].map\\(lambda s: len\\(s.split\\(\\)\\)\\).min\\(\\), d['note'].map\\(lambda s: len\\(s.split\\(\\)\\)\\).max\\(\\)\\)\\); print\\('compliance %.3f applicable=%d of %d'%\\(r.compliance.score, r.compliance.to_dict\\(\\)['applicable_features'], r.compliance.to_dict\\(\\)['assessed_features']\\)\\)\")",
71
+ "Bash(.venv/Scripts/python.exe -c \"from datadoom.engine import load_spec, generate; import numpy as np; r=generate\\(load_spec\\('examples/causal-fraud.datadoom.yaml'\\), seed=42\\); d=r.frame; age=d['age'].to_numpy\\(float\\); edu=d['education'].map\\({'hs':0.,'college':15000.,'grad':40000.}\\).to_numpy\\(\\); inc=d['income'].to_numpy\\(\\); X=np.column_stack\\([np.ones\\(len\\(d\\)\\),age,edu]\\); b,aw,ew=np.linalg.lstsq\\(X,inc,rcond=None\\)[0]; print\\('OLS age_w=%.1f bias=%.0f edu_w=%.3f'%\\(aw,b,ew\\)\\); print\\('noise std=%.0f'%\\(inc-\\(10000+800*age+edu\\)\\).std\\(\\)\\); fr=d['is_fraud'].to_numpy\\(float\\); p=1/\\(1+np.exp\\(-\\(-0.00002*inc+1.0\\)\\)\\); print\\('fraud rate=%.3f theory=%.3f corr=%.3f'%\\(fr.mean\\(\\),p.mean\\(\\),np.corrcoef\\(inc,fr\\)[0,1]\\)\\)\")",
72
+ "Bash(node -e \"console.log\\('reactflow', require\\('reactflow/package.json'\\).version\\)\")",
73
+ "Bash(npx tsc *)",
74
+ "Bash(echo \"tsc-exit:$?\")",
75
+ "Bash(rm -f src/store/theme.ts src/components/ThemeToggle.tsx)",
76
+ "Bash(rmdir src/store)",
77
+ "Bash(npx vite *)",
78
+ "Bash(.venv/Scripts/python.exe -m pytest tests -q -k \"run or migrat or dataset or api\")",
79
+ "Bash(DATADOOM_DB_URL=sqlite:///./.tmp_migtest.db .venv/Scripts/python.exe -c ' *)",
80
+ "Bash(git check-ignore *)",
81
+ "Bash(ls .venv/Scripts/python.exe)",
82
+ "Bash(.venv/Scripts/python.exe -c \"import datadoom, networkx, scipy; print\\('ok', datadoom.__version__\\)\")",
83
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_failure.py -q)",
84
+ "Bash(.venv/Scripts/python.exe -c \"from datadoom.engine import load_spec, generate; r=generate\\(load_spec\\('examples/failure-fraud.datadoom.yaml'\\), seed=42\\); c,i=r.frame,r.injected; print\\('clean NaN total =', int\\(c.isna\\(\\).sum\\(\\).sum\\(\\)\\)\\); print\\('injected income NaN = %.3f'%i['income'].isna\\(\\).mean\\(\\)\\); print\\('injected age NaN = %.3f'%i['age'].isna\\(\\).mean\\(\\)\\); print\\('is_fraud flipped = %.3f'%\\(c['is_fraud'].to_numpy\\(\\)!=i['is_fraud'].to_numpy\\(\\)\\).mean\\(\\)\\); print\\('leakage corr = %.3f'%__import__\\('numpy'\\).corrcoef\\(i['fraud_score'], c['is_fraud'].to_numpy\\(float\\)\\)[0,1]\\); [print\\(' diff:', m['type'], {k:v for k,v in m.items\\(\\) if k in \\('realized_rate','flipped_fraction','realized_noise_std','total_shift','realized_correlation'\\)}\\) for m in r.report.failures['modes']]\")",
85
+ "Bash(.venv/Scripts/python.exe -c 'from datadoom.engine import parse_spec, generate *)",
86
+ "Bash(.venv/Scripts/python.exe -c 'from datadoom.engine import parse_spec *)",
87
+ "Bash(.venv/Scripts/python.exe -c \"import sklearn; print\\('sklearn', sklearn.__version__\\)\")",
88
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe .tmp_eval.py)",
89
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_failure_audit.py -v)",
90
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_failure_audit.py --no-header -q)",
91
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_failure_audit.py --collect-only -q)",
92
+ "Bash(xargs grep -ln \"preview\")",
93
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -c ' *)",
94
+ "Bash(.venv/Scripts/python.exe -c \"import mimesis; print\\(mimesis.__version__\\)\")",
95
+ "Bash(.venv/Scripts/python.exe -m pip install \"mimesis\")",
96
+ "Bash(.venv/Scripts/python.exe -m pip install -e \".[dev]\" -q)",
97
+ "Bash(.venv/Scripts/python.exe -c \"import datadoom, importlib.metadata as m; print\\('import ok'\\); print\\('dist:', m.version\\('datadoom'\\)\\)\")",
98
+ "PowerShell(Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'datadoom|uvicorn|datadoom.exe' } | Select-Object ProcessId, Name, CommandLine | Format-List)",
99
+ "PowerShell(Stop-Process -Id 31788,29824,29312 -Force -ErrorAction SilentlyContinue)",
100
+ "PowerShell(\"stopped\")",
101
+ "Bash(.venv/Scripts/python.exe -c \"import datadoom, importlib.metadata as m; print\\('import ok', m.version\\('datadoom'\\)\\)\")",
102
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_providers.py tests/determinism/ -q)",
103
+ "Bash(.venv/Scripts/python.exe -c \"import csv; rows=list\\(csv.reader\\(open\\('.tmp_people/data.csv',encoding='utf-8'\\)\\)\\); [print\\(r\\) for r in rows[:4]]\")",
104
+ "PowerShell(\"cleaned\")",
105
+ "Bash(.venv/Scripts/datadoom.exe serve *)",
106
+ "Bash(.venv/Scripts/python.exe -c \"print\\(open\\('status.md',encoding='utf-8'\\).read\\(\\)[-1200:]\\)\")",
107
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\" http://127.0.0.1:8000/)",
108
+ "Bash(node -e \"console.log\\(require\\('./package.json'\\).scripts.build\\)\")",
109
+ "Bash(.venv/Scripts/python.exe -m pip install \"scikit-learn>=1.4,<2\")",
110
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_difficulty.py -q)",
111
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_difficulty_audit.py tests/determinism/test_determinism.py -q)",
112
+ "Bash(.venv/Scripts/python.exe -)",
113
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_failure_audit.py -q)",
114
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_failure_audit.py -q -W error::FutureWarning)",
115
+ "Bash(.venv/Scripts/python.exe -m pytest tests/api/test_api.py::test_difficulty_report_round_trips -q)",
116
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_latent.py tests/unit/test_hashing.py tests/determinism/ -q)",
117
+ "Bash(.venv/Scripts/python.exe -m pytest tests/api/test_api.py -q)",
118
+ "Bash(.venv/Scripts/python.exe -m pytest tests/api/test_api.py)",
119
+ "Bash(xargs grep -ln \"plugin\")",
120
+ "Bash(sed -n '1,60p' src/datadoom/engine/export/base.py)",
121
+ "Bash(sed -n '1,108p' src/datadoom/engine/failure/base.py)",
122
+ "Bash(ls tests/*.py)",
123
+ "Bash(find tests *)",
124
+ "Bash(.venv/Scripts/python.exe -m pytest tests/plugin_contract/ -q)",
125
+ "Bash(.venv/Scripts/datadoom.exe plugin *)",
126
+ "Bash(.venv/Scripts/python.exe -c \"import tempfile,os; print\\(tempfile.mkdtemp\\(\\)\\)\")",
127
+ "Bash(set /p PDIR=)",
128
+ "Bash(mktemp -d)",
129
+ "Bash(DATADOOM_HOME=__CMDSUB_OUTPUT__ .venv/Scripts/python.exe -c ' *)",
130
+ "Bash(.venv/Scripts/python.exe -m pytest tests/plugin_contract tests/api -q)",
131
+ "Bash(.venv/Scripts/python.exe -m pytest tests/plugin_contract tests/api)",
132
+ "Bash(.venv/Scripts/python.exe -c \"import importlib.util as u; print\\('pyarrow:', bool\\(u.find_spec\\('pyarrow'\\)\\)\\)\")",
133
+ "Bash(.venv/Scripts/python.exe -m pip install \"pyarrow>=15,<19\" -q)",
134
+ "Bash(.venv/Scripts/python.exe -c \"import pyarrow; print\\('pyarrow', pyarrow.__version__\\)\")",
135
+ "Bash(sed -n '/interface Spec\\\\b/,/^}/p' frontend/src/lib/types.ts)",
136
+ "Bash(sed -n '40,90p' frontend/src/components/ExportModal.tsx)",
137
+ "Bash(grep -n \"useSpecHistory\\\\|const {\\\\|present\\\\|set\\(\\\\|mutate\\\\|=> set\\\\|commit\\\\|pushSpec\\\\|spec,\" frontend/src/pages/Canvas.tsx)",
138
+ "Bash(sed -n '1,30p')",
139
+ "Bash(sed -n '1,40p' frontend/src/lib/useHistory.ts)",
140
+ "Bash(.venv/Scripts/datadoom.exe template *)",
141
+ "Bash(.venv/Scripts/python.exe -m pytest tests/determinism tests/golden tests/unit/test_export_formats.py tests/unit/test_templates.py)",
142
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_templates.py tests/api/test_api.py -q)",
143
+ "Bash(.venv/Scripts/python.exe -m pytest tests/unit/test_templates.py tests/api/test_api.py)",
144
+ "Bash(ls src/datadoom/templates/builtin/)",
145
+ "Bash(find src/datadoom/templates -name \"*.yaml\")",
146
+ "Bash(.venv/Scripts/datadoom.exe validate *)",
147
+ "Bash(.venv/Scripts/python.exe -m pytest tests/ -q -k \"template or api\")",
148
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest tests/unit/test_profile.py -q)",
149
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m ruff check src tests)",
150
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/lint-imports.exe)",
151
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m mypy)",
152
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest -q)",
153
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest)",
154
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -c \"print\\(open\\('status.md',encoding='utf-8'\\).read\\(\\)[:3500]\\)\")",
155
+ "Bash(echo \"ruff: $?\")",
156
+ "Bash(echo \"lint-imports: $?\")",
157
+ "Bash(echo \"mypy: $?\")",
158
+ "Bash(echo \"pytest: $?\")",
159
+ "Read(//tmp/**)",
160
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest tests/api tests/determinism tests/unit/test_metadata.py tests/unit/test_export_formats.py tests/unit/test_store.py -q)",
161
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest tests/api/test_api.py::test_resolved_spec_is_locked_and_downloadable -q)",
162
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest tests/api/test_api.py::test_resolved_spec_is_locked_and_downloadable)",
163
+ "Bash(echo \"ruff:$?\")",
164
+ "Bash(echo \"lint-imports:$?\")",
165
+ "Bash(echo \"mypy:$?\")",
166
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest tests/api tests/determinism tests/unit/test_metadata.py tests/unit/test_export_formats.py -q)",
167
+ "Bash(PYTHONIOENCODING=utf-8 .venv/Scripts/python.exe -m pytest tests/unit/test_audit.py -q)",
168
+ "Bash(./.venv/Scripts/python.exe -m pytest -q)",
169
+ "Bash(./.venv/Scripts/ruff.exe check *)",
170
+ "Bash(./.venv/Scripts/lint-imports.exe)",
171
+ "Bash(./.venv/Scripts/python.exe -m pytest)",
172
+ "Bash(ls README.md CHANGELOG.md CONTRIBUTING.md)",
173
+ "Bash(head -20 README.md)",
174
+ "Bash(./.venv/Scripts/python.exe -c \"from datadoom.templates import CATALOG; [print\\(t.id, '|', t.level, '|', t.domain, '|', t.title\\) for t in CATALOG]\")",
175
+ "Bash(./.venv/Scripts/python.exe -c \"from datadoom.templates import CATALOG; t=CATALOG[0]; print\\([f for f in t.__dict__]\\); print\\('---'\\); [print\\(f'{x.id} | {getattr\\(x,\\\\\"level\\\\\",\\\\\"?\\\\\"\\)} | {x.domain} | {x.name}'\\) for x in CATALOG]\")",
176
+ "Bash(./.venv/Scripts/python.exe -m pip install -e \".[docs]\")",
177
+ "Bash(./.venv/Scripts/python.exe -c \"import datadoom; print\\('datadoom OK', datadoom.__version__\\)\")",
178
+ "Bash(./.venv/Scripts/python.exe -c \"import mkdocs, material; print\\('mkdocs OK'\\)\")",
179
+ "Bash(./.venv/Scripts/python.exe -m mkdocs build --strict)",
180
+ "Bash(echo \"exit=$?\")",
181
+ "Bash(./.venv/Scripts/python.exe -m pip install -e . --no-deps)",
182
+ "Bash(grep -nE \"^/?site|^site/|webdist|\\\\.tmp\" .gitignore)",
183
+ "Bash(echo \"---exit $?---\")",
184
+ "Bash(./.venv/Scripts/python.exe -m ruff check src tests)",
185
+ "Bash(./.venv/Scripts/python.exe -m importlinter.cli lint)",
186
+ "Bash(./.venv/Scripts/datadoom.exe version *)",
187
+ "Bash(ls -d .venv/Lib/site-packages/~*)",
188
+ "Bash(rm -rf .venv/Lib/site-packages/~*)",
189
+ "Bash(./.venv/Scripts/python.exe -c \"import datadoom; print\\('import OK', datadoom.__version__\\)\")",
190
+ "Bash(./.venv/Scripts/python.exe -c \"import build; print\\('build', build.__version__\\)\")",
191
+ "Bash(./.venv/Scripts/python.exe -m pip install -q build)",
192
+ "Bash(./.venv/Scripts/python.exe -m build)",
193
+ "Bash(./.venv/Scripts/python.exe -c \"import zipfile; z=zipfile.ZipFile\\([f for f in __import__\\('glob'\\).glob\\('dist/*.whl'\\)][0]\\); n=z.namelist\\(\\); print\\('webdist/index.html:', any\\(x.endswith\\('webdist/index.html'\\) for x in n\\)\\); print\\('templates yaml count:', sum\\(1 for x in n if x.endswith\\('.yaml'\\) and 'templates' in x\\)\\); print\\('total files:', len\\(n\\)\\)\")",
194
+ "Bash(./.venv/Scripts/python.exe -m pip install -q twine)",
195
+ "Bash(./.venv/Scripts/python.exe -m twine check dist/*)",
196
+ "Bash(./.venv/Scripts/python.exe -c \"import zipfile,glob; z=zipfile.ZipFile\\(glob.glob\\('dist/*.whl'\\)[0]\\); n=z.namelist\\(\\); print\\('webdist/index.html in wheel:', any\\(x.endswith\\('webdist/index.html'\\) for x in n\\)\\); print\\('webdist asset files:', sum\\(1 for x in n if 'webdist/assets/' in x\\)\\); import tarfile; t=tarfile.open\\(glob.glob\\('dist/*.tar.gz'\\)[0]\\); tn=t.getnames\\(\\); print\\('webdist/index.html in sdist:', any\\(x.endswith\\('webdist/index.html'\\) for x in tn\\)\\)\")",
197
+ "Bash(./.tmp_smoke/Scripts/datadoom.exe version *)",
198
+ "Bash(./.tmp_smoke/Scripts/datadoom.exe run *)",
199
+ "Bash(./.tmp_smoke/Scripts/python.exe -c \"import importlib.resources as r; print\\('web Canvas bundled OK' if \\(r.files\\('datadoom'\\)/'webdist'/'index.html'\\).is_file\\(\\) else 'MISSING'\\)\")",
200
+ "Bash(rm -rf .tmp_smoke .tmp_smoke_run)",
201
+ "Bash(docker --version)",
202
+ "Bash(docker build *)",
203
+ "Bash(./.venv/Scripts/mypy.exe)",
204
+ "Bash(./.venv/Scripts/python.exe -c \"import platform, numpy as np; print\\(f'{platform.system\\(\\)}-{platform.machine\\(\\)}-numpy-{np.__version__}'\\)\")",
205
+ "Bash(./.venv/Scripts/python.exe -c \"from datadoom.engine import generate, load_spec; import tempfile; r=generate\\(load_spec\\('tests/golden/fraud_numeric.datadoom.yaml'\\), seed=12345, out_dir=tempfile.mkdtemp\\(\\)\\); print\\(r.artifacts[0].checksum_sha256\\)\")",
206
+ "Bash(./.venv/Scripts/python.exe -m pytest tests/determinism -q)",
207
+ "Bash(./.venv/Scripts/python.exe -m pytest tests/perf -q)",
208
+ "Bash(./.venv/Scripts/python.exe -m pytest -m perf -q)",
209
+ "Bash(./.venv/Scripts/python.exe -m pytest -m perf)"
210
+ ]
211
+ }
212
+ }
@@ -0,0 +1,29 @@
1
+ # Keep the build context small and the image clean.
2
+ .git
3
+ .gitignore
4
+ .github
5
+ .venv
6
+ **/__pycache__
7
+ **/*.pyc
8
+ *.egg-info
9
+ src/*.egg-info
10
+
11
+ # Frontend build inputs/outputs are produced fresh in the Node stage.
12
+ frontend/node_modules
13
+ frontend/dist
14
+ src/datadoom/webdist
15
+
16
+ # Docs site build output + legacy doc sets (not needed at runtime).
17
+ site
18
+ docs
19
+ Docs
20
+
21
+ # Tests and scratch/run output.
22
+ tests
23
+ .tmp_run
24
+ .tmp_*
25
+ out
26
+ tmp
27
+ dist
28
+ build
29
+ *.local.yaml
@@ -0,0 +1,12 @@
1
+ ## What & why
2
+
3
+ <!-- A short description of the change and the motivation. Link the issue/DDEP. -->
4
+
5
+ ## Checklist
6
+
7
+ - [ ] Tests added/updated (unit, and determinism tests for any stochastic code)
8
+ - [ ] Docs updated if user-facing (`docs_v2/` and/or `CHANGELOG.md`)
9
+ - [ ] Local gates pass: `ruff check`, `mypy`, `lint-imports`, `pytest`
10
+ - [ ] Architecture upheld: `engine/` stays framework-free; all randomness via `engine.rng`
11
+ - [ ] Spec changes are additive within `datadoom_version: 1`
12
+ - [ ] Commits are DCO **signed off** (`git commit -s`)
@@ -0,0 +1,82 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ concurrency:
9
+ group: ci-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ env:
13
+ # Pin BLAS to a single thread so the determinism guarantee holds on CI.
14
+ OMP_NUM_THREADS: "1"
15
+ OPENBLAS_NUM_THREADS: "1"
16
+ MKL_NUM_THREADS: "1"
17
+
18
+ jobs:
19
+ quality:
20
+ name: lint + type + import-lint (${{ matrix.os }}, py${{ matrix.python }})
21
+ runs-on: ${{ matrix.os }}
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ os: [ubuntu-latest, macos-latest, windows-latest]
26
+ python: ["3.11", "3.12"]
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: actions/setup-python@v5
30
+ with:
31
+ python-version: ${{ matrix.python }}
32
+ - name: Install
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ python -m pip install -e ".[dev]"
36
+ - name: Ruff (lint)
37
+ run: ruff check src tests
38
+ - name: Mypy (type-check engine strict)
39
+ run: mypy
40
+ - name: Import boundaries
41
+ run: lint-imports
42
+ - name: Tests
43
+ run: pytest
44
+
45
+ perf:
46
+ name: perf budget
47
+ runs-on: ubuntu-latest
48
+ # Non-gating: wall-clock budgets are informational and must not block a merge
49
+ # on runner jitter, but a real regression (e.g. an O(n^2) hot path) shows red.
50
+ continue-on-error: true
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ - uses: actions/setup-python@v5
54
+ with:
55
+ python-version: "3.12"
56
+ - name: Install
57
+ run: |
58
+ python -m pip install --upgrade pip
59
+ python -m pip install -e ".[dev]"
60
+ - name: Perf budget
61
+ run: pytest -m perf -v
62
+
63
+ docker:
64
+ name: docker image build + smoke
65
+ runs-on: ubuntu-latest
66
+ # Non-gating: a Docker/registry hiccup must not block a code merge, but a
67
+ # broken Dockerfile still shows up red on the PR.
68
+ continue-on-error: true
69
+ steps:
70
+ - uses: actions/checkout@v4
71
+ - uses: docker/setup-buildx-action@v3
72
+ - name: Build image
73
+ uses: docker/build-push-action@v6
74
+ with:
75
+ context: .
76
+ push: false
77
+ load: true
78
+ tags: datadoom:ci
79
+ - name: Smoke (CLI + bundled web Canvas)
80
+ run: |
81
+ docker run --rm datadoom:ci datadoom version
82
+ docker run --rm datadoom:ci python -c "import importlib.resources as r; assert (r.files('datadoom') / 'webdist' / 'index.html').is_file(); print('web Canvas bundled OK')"
@@ -0,0 +1,50 @@
1
+ name: Docs
2
+
3
+ # Builds the mkdocs-material site. On pull requests it only *builds* (a broken
4
+ # build fails the check); on a push to main it builds and publishes to GitHub
5
+ # Pages via the gh-pages branch. Enable Pages once (Settings → Pages → Deploy
6
+ # from branch: gh-pages) — see docs_v2/22_Release_and_Publishing_Runbook.md.
7
+
8
+ on:
9
+ push:
10
+ branches: [main]
11
+ paths:
12
+ - "docs_site/**"
13
+ - "docs_v2/**"
14
+ - "mkdocs.yml"
15
+ - ".github/workflows/docs.yml"
16
+ pull_request:
17
+ paths:
18
+ - "docs_site/**"
19
+ - "docs_v2/**"
20
+ - "mkdocs.yml"
21
+ - ".github/workflows/docs.yml"
22
+ workflow_dispatch:
23
+
24
+ permissions:
25
+ contents: write
26
+
27
+ concurrency:
28
+ group: docs-${{ github.ref }}
29
+ cancel-in-progress: true
30
+
31
+ jobs:
32
+ build:
33
+ name: build site
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+ - uses: actions/checkout@v4
37
+ with:
38
+ fetch-depth: 0
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: "3.12"
42
+ - name: Install docs tooling
43
+ run: |
44
+ python -m pip install --upgrade pip
45
+ python -m pip install -e ".[docs]"
46
+ - name: Build (verify)
47
+ run: mkdocs build --strict
48
+ - name: Deploy to GitHub Pages
49
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
50
+ run: mkdocs gh-deploy --force
@@ -0,0 +1,144 @@
1
+ name: Release
2
+
3
+ # Tag-driven, tokenless release. Cutting a release is just:
4
+ # git tag -s vX.Y.Z && git push origin main --tags
5
+ # See docs_v2/22_Release_and_Publishing_Runbook.md for the one-time PyPI Trusted
6
+ # Publisher + GitHub Environment setup. There are NO long-lived secrets — PyPI
7
+ # upload and provenance signing both use short-lived GitHub OIDC tokens.
8
+
9
+ on:
10
+ push:
11
+ tags: ["v*"]
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ env:
18
+ OMP_NUM_THREADS: "1"
19
+ OPENBLAS_NUM_THREADS: "1"
20
+ MKL_NUM_THREADS: "1"
21
+
22
+ jobs:
23
+ build:
24
+ name: build sdist + wheel (with web Canvas) + smoke
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+
29
+ # The web Canvas is compiled into src/datadoom/webdist/ and shipped inside
30
+ # the wheel (gitignored in source), so the release build must build it first.
31
+ - uses: actions/setup-node@v4
32
+ with:
33
+ node-version: "20"
34
+ cache: npm
35
+ cache-dependency-path: frontend/package-lock.json
36
+ - name: Build web Canvas -> webdist
37
+ working-directory: frontend
38
+ run: |
39
+ npm ci
40
+ npm run build
41
+
42
+ - uses: actions/setup-python@v5
43
+ with:
44
+ python-version: "3.12"
45
+ - name: Build distributions
46
+ run: |
47
+ python -m pip install --upgrade pip build twine
48
+ python -m build
49
+ python -m twine check dist/*
50
+
51
+ - name: Smoke-test the built wheel in a clean venv
52
+ run: |
53
+ python -m venv /tmp/smoke
54
+ /tmp/smoke/bin/python -m pip install --upgrade pip
55
+ /tmp/smoke/bin/python -m pip install dist/*.whl
56
+ /tmp/smoke/bin/datadoom version
57
+ # The shipped wheel must regenerate deterministically and include the SPA.
58
+ /tmp/smoke/bin/datadoom run examples/tabular-basic.datadoom.yaml --seed 7 --out /tmp/smoke_run
59
+ /tmp/smoke/bin/python -c "import datadoom, importlib.resources as r; assert (r.files('datadoom') / 'webdist' / 'index.html').is_file(), 'webdist missing from wheel'; print('web Canvas bundled OK')"
60
+
61
+ - uses: actions/upload-artifact@v4
62
+ with:
63
+ name: dist
64
+ path: dist/
65
+
66
+ provenance:
67
+ name: sign build provenance (keyless)
68
+ needs: build
69
+ runs-on: ubuntu-latest
70
+ permissions:
71
+ id-token: write # mint the OIDC token Sigstore signs with
72
+ attestations: write # write the attestation to the repo
73
+ contents: read
74
+ steps:
75
+ - uses: actions/download-artifact@v4
76
+ with:
77
+ name: dist
78
+ path: dist
79
+ - uses: actions/attest-build-provenance@v1
80
+ with:
81
+ subject-path: "dist/*"
82
+
83
+ github-release:
84
+ name: GitHub Release
85
+ needs: build
86
+ if: startsWith(github.ref, 'refs/tags/')
87
+ runs-on: ubuntu-latest
88
+ permissions:
89
+ contents: write
90
+ steps:
91
+ - uses: actions/download-artifact@v4
92
+ with:
93
+ name: dist
94
+ path: dist
95
+ - uses: softprops/action-gh-release@v2
96
+ with:
97
+ files: dist/*
98
+ generate_release_notes: true
99
+
100
+ pypi:
101
+ name: publish to PyPI (OIDC trusted publishing)
102
+ needs: build
103
+ if: startsWith(github.ref, 'refs/tags/')
104
+ runs-on: ubuntu-latest
105
+ environment: pypi # register this env + the trusted publisher on PyPI
106
+ permissions:
107
+ id-token: write # tokenless upload via OIDC
108
+ steps:
109
+ - uses: actions/download-artifact@v4
110
+ with:
111
+ name: dist
112
+ path: dist
113
+ - uses: pypa/gh-action-pypi-publish@release/v1
114
+
115
+ docker:
116
+ name: build + push image (GHCR)
117
+ needs: build
118
+ if: startsWith(github.ref, 'refs/tags/')
119
+ runs-on: ubuntu-latest
120
+ permissions:
121
+ contents: read
122
+ packages: write
123
+ steps:
124
+ - uses: actions/checkout@v4
125
+ - uses: docker/setup-buildx-action@v3
126
+ - uses: docker/login-action@v3
127
+ with:
128
+ registry: ghcr.io
129
+ username: ${{ github.actor }}
130
+ password: ${{ secrets.GITHUB_TOKEN }}
131
+ - id: meta
132
+ uses: docker/metadata-action@v5
133
+ with:
134
+ images: ghcr.io/${{ github.repository }}
135
+ tags: |
136
+ type=semver,pattern={{version}}
137
+ type=semver,pattern={{major}}.{{minor}}
138
+ type=raw,value=latest
139
+ - uses: docker/build-push-action@v6
140
+ with:
141
+ context: .
142
+ push: true
143
+ tags: ${{ steps.meta.outputs.tags }}
144
+ labels: ${{ steps.meta.outputs.labels }}
@@ -0,0 +1,68 @@
1
+ name: Reproducibility Matrix
2
+
3
+ # Proves the headline guarantee: on the pinned path, the same (spec_hash, seed)
4
+ # yields a bitwise-identical artifact. Runs the determinism gate across OSes and
5
+ # Python versions. See docs_v2/13_Testing_and_Reproducibility_Strategy.md.
6
+ #
7
+ # Scope (per doc 13): the BITWISE guarantee holds within a single OS/arch on the
8
+ # pinned dependency set; across OS/arch we claim statistical (not bitwise)
9
+ # equivalence. So numpy is pinned to the version the golden checksum was recorded
10
+ # against, and the golden checksum is keyed per platform. Cells whose platform is
11
+ # not yet recorded SKIP and print the value to record (see the job summary).
12
+
13
+ on:
14
+ push:
15
+ branches: [main]
16
+ pull_request:
17
+ workflow_dispatch:
18
+
19
+ env:
20
+ OMP_NUM_THREADS: "1"
21
+ OPENBLAS_NUM_THREADS: "1"
22
+ MKL_NUM_THREADS: "1"
23
+ # Pin numpy to the version the golden checksums are recorded against so the
24
+ # golden gate asserts (rather than skipping on version drift). numpy's random
25
+ # streams are the determinism-critical dependency for the numeric golden spec.
26
+ DATADOOM_PINNED_NUMPY: "2.4.6"
27
+
28
+ jobs:
29
+ repro:
30
+ name: determinism (${{ matrix.os }}, py${{ matrix.python }})
31
+ runs-on: ${{ matrix.os }}
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ os: [ubuntu-latest, macos-latest, windows-latest]
36
+ python: ["3.11", "3.12"]
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: ${{ matrix.python }}
42
+ - name: Install (pinned numpy)
43
+ run: |
44
+ python -m pip install --upgrade pip
45
+ python -m pip install -e ".[dev]" "numpy==${{ env.DATADOOM_PINNED_NUMPY }}"
46
+ - name: Determinism gate
47
+ run: pytest tests/determinism -v
48
+ - name: CLI verify round-trip
49
+ run: |
50
+ datadoom run examples/tabular-basic.datadoom.yaml --seed 7 --out _run
51
+ datadoom verify examples/tabular-basic.datadoom.yaml --seed 7 --against _run
52
+ - name: Report golden checksum for this cell
53
+ if: always()
54
+ shell: bash
55
+ run: |
56
+ python - <<'PY' | tee -a "$GITHUB_STEP_SUMMARY"
57
+ import platform, tempfile
58
+ import numpy as np
59
+ from datadoom.engine import generate, load_spec
60
+ r = generate(load_spec("tests/golden/fraud_numeric.datadoom.yaml"),
61
+ seed=12345, out_dir=tempfile.mkdtemp())
62
+ key = f"{platform.system()}-{platform.machine()}-numpy-{np.__version__}"
63
+ print(f"### Golden checksum")
64
+ print(f'`"{key}": "{r.artifacts[0].checksum_sha256}"`')
65
+ print("")
66
+ print("Add the line above to `tests/golden/checksums.json` to turn this "
67
+ "cell's golden test from a skip into a bitwise assertion.")
68
+ PY
@@ -0,0 +1,44 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ # Anchor build-output dirs to the repo root so they don't swallow source
7
+ # packages like src/datadoom/engine/dist/.
8
+ /build/
9
+ /dist/
10
+ .venv/
11
+ venv/
12
+ env/
13
+ .import_linter_cache/
14
+
15
+ # Tooling
16
+ .pytest_cache/
17
+ .mypy_cache/
18
+ .ruff_cache/
19
+ .coverage
20
+ htmlcov/
21
+ coverage.xml
22
+
23
+ # DataDoom local data / generated artifacts
24
+ .datadoom/
25
+ /out/
26
+ /tmp/
27
+ .tmp_run/
28
+ *.local.yaml
29
+
30
+ # Frontend (added in a later phase)
31
+ frontend/node_modules/
32
+ frontend/dist/
33
+ src/datadoom/webdist/
34
+
35
+ # Docs site build output (mkdocs)
36
+ /site/
37
+
38
+ # OS / editor
39
+ .DS_Store
40
+ Thumbs.db
41
+ .idea/
42
+ .vscode/
43
+
44
+ t.py