jack-data-science-agent 4.1.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 (448) hide show
  1. jack_data_science_agent-4.1.0/.github/CODEOWNERS +8 -0
  2. jack_data_science_agent-4.1.0/.github/ISSUE_TEMPLATE/bug_report.md +10 -0
  3. jack_data_science_agent-4.1.0/.github/ISSUE_TEMPLATE/feature_request.md +9 -0
  4. jack_data_science_agent-4.1.0/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  5. jack_data_science_agent-4.1.0/.github/dependabot.yml +11 -0
  6. jack_data_science_agent-4.1.0/.github/workflows/ci.yml +23 -0
  7. jack_data_science_agent-4.1.0/.github/workflows/codeql.yml +36 -0
  8. jack_data_science_agent-4.1.0/.github/workflows/dependency-review.yml +23 -0
  9. jack_data_science_agent-4.1.0/.github/workflows/secret-scan.yml +18 -0
  10. jack_data_science_agent-4.1.0/.gitignore +37 -0
  11. jack_data_science_agent-4.1.0/.pre-commit-config.yaml +7 -0
  12. jack_data_science_agent-4.1.0/.python-version +1 -0
  13. jack_data_science_agent-4.1.0/ARCHITECTURE_FREEZE_V0.1.md +351 -0
  14. jack_data_science_agent-4.1.0/CHANGELOG.md +126 -0
  15. jack_data_science_agent-4.1.0/CITATION.cff +28 -0
  16. jack_data_science_agent-4.1.0/CODE_OF_CONDUCT.md +9 -0
  17. jack_data_science_agent-4.1.0/CONTRIBUTING.md +28 -0
  18. jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT.md +2934 -0
  19. jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V0_1.md +3317 -0
  20. jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V2_0.md +3082 -0
  21. jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V3_0.md +2505 -0
  22. jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V4_0.md +2469 -0
  23. jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V4_1.md +2083 -0
  24. jack_data_science_agent-4.1.0/LICENSE +21 -0
  25. jack_data_science_agent-4.1.0/PKG-INFO +257 -0
  26. jack_data_science_agent-4.1.0/README.md +184 -0
  27. jack_data_science_agent-4.1.0/ROADMAP.md +34 -0
  28. jack_data_science_agent-4.1.0/SECURITY.md +36 -0
  29. jack_data_science_agent-4.1.0/THIRD_PARTY_LICENSES.md +40 -0
  30. jack_data_science_agent-4.1.0/apps/api/pyproject.toml +13 -0
  31. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/__init__.py +1 -0
  32. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/core/__init__.py +0 -0
  33. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/core/config.py +13 -0
  34. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/core/database.py +21 -0
  35. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/main.py +32 -0
  36. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/__init__.py +0 -0
  37. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/analysis.py +192 -0
  38. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/datasets.py +74 -0
  39. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/experiments.py +76 -0
  40. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/health.py +87 -0
  41. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/__init__.py +0 -0
  42. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/analysis_service.py +152 -0
  43. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/dataset_service.py +88 -0
  44. jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/experiment_service.py +88 -0
  45. jack_data_science_agent-4.1.0/apps/api/tests/__init__.py +0 -0
  46. jack_data_science_agent-4.1.0/apps/api/tests/test_health.py +28 -0
  47. jack_data_science_agent-4.1.0/apps/jupyter/README.md +121 -0
  48. jack_data_science_agent-4.1.0/apps/jupyter/pyproject.toml +19 -0
  49. jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/__init__.py +14 -0
  50. jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/display.py +146 -0
  51. jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/magic.py +359 -0
  52. jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/metadata.py +63 -0
  53. jack_data_science_agent-4.1.0/apps/vscode/README.md +84 -0
  54. jack_data_science_agent-4.1.0/apps/vscode/package-lock.json +525 -0
  55. jack_data_science_agent-4.1.0/apps/vscode/package.json +122 -0
  56. jack_data_science_agent-4.1.0/apps/vscode/src/dsa.ts +156 -0
  57. jack_data_science_agent-4.1.0/apps/vscode/src/extension.ts +213 -0
  58. jack_data_science_agent-4.1.0/apps/vscode/src/views.ts +173 -0
  59. jack_data_science_agent-4.1.0/apps/vscode/tsconfig.json +16 -0
  60. jack_data_science_agent-4.1.0/apps/web/app/analysis/[runId]/page.tsx +114 -0
  61. jack_data_science_agent-4.1.0/apps/web/app/analysis/page.tsx +57 -0
  62. jack_data_science_agent-4.1.0/apps/web/app/benchmarks/page.tsx +64 -0
  63. jack_data_science_agent-4.1.0/apps/web/app/datasets/[id]/page.tsx +35 -0
  64. jack_data_science_agent-4.1.0/apps/web/app/datasets/page.tsx +70 -0
  65. jack_data_science_agent-4.1.0/apps/web/app/evaluations/page.tsx +9 -0
  66. jack_data_science_agent-4.1.0/apps/web/app/failures/page.tsx +9 -0
  67. jack_data_science_agent-4.1.0/apps/web/app/globals.css +3 -0
  68. jack_data_science_agent-4.1.0/apps/web/app/layout.tsx +29 -0
  69. jack_data_science_agent-4.1.0/apps/web/app/mcp/page.tsx +9 -0
  70. jack_data_science_agent-4.1.0/apps/web/app/page.tsx +49 -0
  71. jack_data_science_agent-4.1.0/apps/web/app/reports/page.tsx +35 -0
  72. jack_data_science_agent-4.1.0/apps/web/app/research/page.tsx +37 -0
  73. jack_data_science_agent-4.1.0/apps/web/app/runs/[id]/page.tsx +9 -0
  74. jack_data_science_agent-4.1.0/apps/web/app/runs/[id]/replay/page.tsx +9 -0
  75. jack_data_science_agent-4.1.0/apps/web/app/runs/page.tsx +9 -0
  76. jack_data_science_agent-4.1.0/apps/web/next-env.d.ts +5 -0
  77. jack_data_science_agent-4.1.0/apps/web/next.config.mjs +3 -0
  78. jack_data_science_agent-4.1.0/apps/web/package-lock.json +2116 -0
  79. jack_data_science_agent-4.1.0/apps/web/package.json +25 -0
  80. jack_data_science_agent-4.1.0/apps/web/postcss.config.js +1 -0
  81. jack_data_science_agent-4.1.0/apps/web/tailwind.config.js +2 -0
  82. jack_data_science_agent-4.1.0/apps/web/tsconfig.json +21 -0
  83. jack_data_science_agent-4.1.0/benchmarks/baseline/README.md +26 -0
  84. jack_data_science_agent-4.1.0/benchmarks/baseline/raw_runs.json +27756 -0
  85. jack_data_science_agent-4.1.0/benchmarks/baseline/results.json +1052 -0
  86. jack_data_science_agent-4.1.0/benchmarks/baseline/summary.json +44 -0
  87. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/.gitkeep +0 -0
  88. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/README.md +23 -0
  89. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/catalog.json +727 -0
  90. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/ads.csv +301 -0
  91. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/correlation.csv +401 -0
  92. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/customer_churn.csv +601 -0
  93. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/data_quality.csv +301 -0
  94. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/energy.csv +501 -0
  95. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/financial.csv +501 -0
  96. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/groups.csv +501 -0
  97. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/health.csv +401 -0
  98. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/house_prices.csv +501 -0
  99. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/hr_promotion.csv +601 -0
  100. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/marketing.csv +401 -0
  101. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/outliers.csv +251 -0
  102. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/paired_series.csv +201 -0
  103. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/region_revenue.csv +401 -0
  104. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/retail_sales.csv +601 -0
  105. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/sales.csv +501 -0
  106. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/timeseries.csv +301 -0
  107. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/timeseries_seasonal.csv +301 -0
  108. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/timeseries_trend.csv +301 -0
  109. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/titanic.csv +901 -0
  110. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/results/raw_runs.json +1117 -0
  111. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/results/results.json +142 -0
  112. jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/results/summary.json +16 -0
  113. jack_data_science_agent-4.1.0/benchmarks/leaderboard/README.md +21 -0
  114. jack_data_science_agent-4.1.0/benchmarks/leaderboard/leaderboard.json +15 -0
  115. jack_data_science_agent-4.1.0/benchmarks/v2/README.md +27 -0
  116. jack_data_science_agent-4.1.0/benchmarks/v2/catalog.json +4250 -0
  117. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/ads.csv +301 -0
  118. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/causal_toy.csv +601 -0
  119. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/clustering.csv +451 -0
  120. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/correlation.csv +401 -0
  121. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/customer_churn.csv +601 -0
  122. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/data_quality.csv +301 -0
  123. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/energy.csv +501 -0
  124. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/financial.csv +501 -0
  125. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/groups.csv +501 -0
  126. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/health.csv +401 -0
  127. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/high_cardinality.csv +1001 -0
  128. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/house_prices.csv +501 -0
  129. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/hr_promotion.csv +601 -0
  130. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/imbalanced.csv +601 -0
  131. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/leakage.csv +401 -0
  132. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/marketing.csv +401 -0
  133. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/missing_heavy.csv +501 -0
  134. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/mixed_types.csv +401 -0
  135. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/outliers.csv +251 -0
  136. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/paired_series.csv +201 -0
  137. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/region_revenue.csv +401 -0
  138. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/retail_sales.csv +601 -0
  139. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/sales.csv +501 -0
  140. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/time_series_long.csv +601 -0
  141. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/timeseries.csv +301 -0
  142. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/timeseries_seasonal.csv +301 -0
  143. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/timeseries_trend.csv +301 -0
  144. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/titanic.csv +901 -0
  145. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/unicode.csv +139 -0
  146. jack_data_science_agent-4.1.0/benchmarks/v2/datasets/wide_table.csv +301 -0
  147. jack_data_science_agent-4.1.0/conftest.py +22 -0
  148. jack_data_science_agent-4.1.0/data/.gitkeep +0 -0
  149. jack_data_science_agent-4.1.0/demo/README.md +48 -0
  150. jack_data_science_agent-4.1.0/demo/datasets/sales.csv +501 -0
  151. jack_data_science_agent-4.1.0/demo/evidence/state.json +525 -0
  152. jack_data_science_agent-4.1.0/demo/questions/demo-question.md +12 -0
  153. jack_data_science_agent-4.1.0/demo/runs/demo/manifest.json +6 -0
  154. jack_data_science_agent-4.1.0/demo/runs/demo/report.md +45 -0
  155. jack_data_science_agent-4.1.0/demo/runs/demo/state.json +525 -0
  156. jack_data_science_agent-4.1.0/docker/Dockerfile.api +10 -0
  157. jack_data_science_agent-4.1.0/docker/Dockerfile.web +13 -0
  158. jack_data_science_agent-4.1.0/docker-compose.yml +28 -0
  159. jack_data_science_agent-4.1.0/docs/.gitkeep +0 -0
  160. jack_data_science_agent-4.1.0/docs/ADR/ADR-001-mcp-2026-07-28-stateless-core.md +40 -0
  161. jack_data_science_agent-4.1.0/docs/FRONTEND_IA.md +26 -0
  162. jack_data_science_agent-4.1.0/docs/MCP_DESIGN.md +45 -0
  163. jack_data_science_agent-4.1.0/docs/README.md +29 -0
  164. jack_data_science_agent-4.1.0/docs/agent-system.md +15 -0
  165. jack_data_science_agent-4.1.0/docs/agent.md +14 -0
  166. jack_data_science_agent-4.1.0/docs/api.md +20 -0
  167. jack_data_science_agent-4.1.0/docs/architecture.md +179 -0
  168. jack_data_science_agent-4.1.0/docs/benchmark.md +26 -0
  169. jack_data_science_agent-4.1.0/docs/contributing.md +28 -0
  170. jack_data_science_agent-4.1.0/docs/evaluation.md +29 -0
  171. jack_data_science_agent-4.1.0/docs/evidence.md +17 -0
  172. jack_data_science_agent-4.1.0/docs/getting-started.md +48 -0
  173. jack_data_science_agent-4.1.0/docs/mcp.md +21 -0
  174. jack_data_science_agent-4.1.0/docs/reproducibility.md +44 -0
  175. jack_data_science_agent-4.1.0/docs/research.md +26 -0
  176. jack_data_science_agent-4.1.0/docs/security.md +13 -0
  177. jack_data_science_agent-4.1.0/docs/statistics.md +13 -0
  178. jack_data_science_agent-4.1.0/docs/tools.md +24 -0
  179. jack_data_science_agent-4.1.0/docs/v2/Baseline Report.md +347 -0
  180. jack_data_science_agent-4.1.0/docs/v2/MCP_2026_Audit.md +14 -0
  181. jack_data_science_agent-4.1.0/docs/v2/baseline/ARCHITECTURE.md +65 -0
  182. jack_data_science_agent-4.1.0/docs/v2/evaluation.md +12 -0
  183. jack_data_science_agent-4.1.0/docs/v2/security.md +15 -0
  184. jack_data_science_agent-4.1.0/docs/v3/BENCHMARK_AUDIT.md +62 -0
  185. jack_data_science_agent-4.1.0/docs/v3/CROSS_MODEL.md +115 -0
  186. jack_data_science_agent-4.1.0/docs/v3/EXTERNAL_VALIDATION.md +104 -0
  187. jack_data_science_agent-4.1.0/docs/v3/HUMAN_EVALUATION_GUIDE.md +122 -0
  188. jack_data_science_agent-4.1.0/docs/v3/RELIABILITY.md +117 -0
  189. jack_data_science_agent-4.1.0/docs/v3/REPRODUCTION.md +136 -0
  190. jack_data_science_agent-4.1.0/docs/v3/STATISTICAL_EVALUATION.md +120 -0
  191. jack_data_science_agent-4.1.0/docs/v3/V2_FINAL_BASELINE.md +178 -0
  192. jack_data_science_agent-4.1.0/docs/v4/CONTRIBUTOR_GUIDE.md +21 -0
  193. jack_data_science_agent-4.1.0/docs/v4/SHOWCASE.md +12 -0
  194. jack_data_science_agent-4.1.0/docs/v4/V3_FREEZE_REPORT.md +216 -0
  195. jack_data_science_agent-4.1.0/docs/v4/benchmark.md +7 -0
  196. jack_data_science_agent-4.1.0/docs/v4/cli.md +12 -0
  197. jack_data_science_agent-4.1.0/docs/v4/jupyter.md +43 -0
  198. jack_data_science_agent-4.1.0/docs/v4/mcp.md +50 -0
  199. jack_data_science_agent-4.1.0/docs/v4/migration.md +10 -0
  200. jack_data_science_agent-4.1.0/docs/v4/overview.md +5 -0
  201. jack_data_science_agent-4.1.0/docs/v4/perf.md +9 -0
  202. jack_data_science_agent-4.1.0/docs/v4/plugins.md +96 -0
  203. jack_data_science_agent-4.1.0/docs/v4/product-discovery.md +17 -0
  204. jack_data_science_agent-4.1.0/docs/v4/sdk.md +36 -0
  205. jack_data_science_agent-4.1.0/docs/v4/vscode.md +53 -0
  206. jack_data_science_agent-4.1.0/docs/v4_1/EXTERNAL_DEVELOPER_VALIDATION.md +102 -0
  207. jack_data_science_agent-4.1.0/docs/v4_1/MCP_COMPATIBILITY.md +42 -0
  208. jack_data_science_agent-4.1.0/docs/v4_1/MIGRATION_V4_0_TO_V4_1.md +62 -0
  209. jack_data_science_agent-4.1.0/docs/v4_1/RELEASE_MATRIX.md +27 -0
  210. jack_data_science_agent-4.1.0/docs/v4_1/SDK_PUBLIC_API_AUDIT.md +110 -0
  211. jack_data_science_agent-4.1.0/docs/v4_1/V4_IMPLEMENTATION_TRUTH.md +63 -0
  212. jack_data_science_agent-4.1.0/docs/v4_1/W3_PLUGIN_HARDENING.md +86 -0
  213. jack_data_science_agent-4.1.0/docs/v4_1/W4_JUPYTER.md +87 -0
  214. jack_data_science_agent-4.1.0/docs/v4_1/W5_VSCODE.md +71 -0
  215. jack_data_science_agent-4.1.0/docs/v4_1/W6_MCP_APP.md +110 -0
  216. jack_data_science_agent-4.1.0/docs/v4_1/W7_SECURITY.md +92 -0
  217. jack_data_science_agent-4.1.0/docs/v4_1/external-validation.md +13 -0
  218. jack_data_science_agent-4.1.0/docs/v4_1/jupyter.md +17 -0
  219. jack_data_science_agent-4.1.0/docs/v4_1/mcp.md +15 -0
  220. jack_data_science_agent-4.1.0/docs/v4_1/migration.md +62 -0
  221. jack_data_science_agent-4.1.0/docs/v4_1/overview.md +18 -0
  222. jack_data_science_agent-4.1.0/docs/v4_1/performance.json +53 -0
  223. jack_data_science_agent-4.1.0/docs/v4_1/performance.md +53 -0
  224. jack_data_science_agent-4.1.0/docs/v4_1/plugins.md +15 -0
  225. jack_data_science_agent-4.1.0/docs/v4_1/release.md +33 -0
  226. jack_data_science_agent-4.1.0/docs/v4_1/sdk.md +21 -0
  227. jack_data_science_agent-4.1.0/docs/v4_1/security.md +19 -0
  228. jack_data_science_agent-4.1.0/docs/v4_1/vscode.md +23 -0
  229. jack_data_science_agent-4.1.0/examples/README.md +39 -0
  230. jack_data_science_agent-4.1.0/examples/analyses/.gitkeep +0 -0
  231. jack_data_science_agent-4.1.0/examples/datasets/.gitkeep +0 -0
  232. jack_data_science_agent-4.1.0/examples/datasets/sales.csv +501 -0
  233. jack_data_science_agent-4.1.0/examples/datasets/titanic.csv +901 -0
  234. jack_data_science_agent-4.1.0/human-eval/README.md +40 -0
  235. jack_data_science_agent-4.1.0/human-eval/agreement.json +4 -0
  236. jack_data_science_agent-4.1.0/human-eval/reviews.template.json +58 -0
  237. jack_data_science_agent-4.1.0/human-eval/samples.json +90 -0
  238. jack_data_science_agent-4.1.0/mkdocs.yml +40 -0
  239. jack_data_science_agent-4.1.0/package-lock.json +2075 -0
  240. jack_data_science_agent-4.1.0/package.json +16 -0
  241. jack_data_science_agent-4.1.0/packages/agent/prompts/critic/v1.yaml +5 -0
  242. jack_data_science_agent-4.1.0/packages/agent/prompts/data_scientist/v1.yaml +5 -0
  243. jack_data_science_agent-4.1.0/packages/agent/prompts/planner/v1.yaml +5 -0
  244. jack_data_science_agent-4.1.0/packages/agent/prompts/report/v1.yaml +5 -0
  245. jack_data_science_agent-4.1.0/packages/agent/pyproject.toml +12 -0
  246. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/__init__.py +37 -0
  247. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/critic.py +136 -0
  248. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/graph.py +543 -0
  249. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/langgraph_graph.py +472 -0
  250. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/planner.py +330 -0
  251. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/report.py +95 -0
  252. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/state.py +127 -0
  253. jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/trajectory.py +117 -0
  254. jack_data_science_agent-4.1.0/packages/datasets/pyproject.toml +12 -0
  255. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/__init__.py +42 -0
  256. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/errors.py +14 -0
  257. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/hash_utils.py +19 -0
  258. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/loader.py +73 -0
  259. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/models.py +75 -0
  260. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/profiler.py +164 -0
  261. jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/validate.py +88 -0
  262. jack_data_science_agent-4.1.0/packages/evaluation/pyproject.toml +16 -0
  263. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/__init__.py +14 -0
  264. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/catalog.py +71 -0
  265. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/cli.py +446 -0
  266. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/cross_model.py +163 -0
  267. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/doctor.py +43 -0
  268. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/evaluation_framework.py +115 -0
  269. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/external_validation.py +236 -0
  270. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/human_eval.py +258 -0
  271. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/metrics.py +241 -0
  272. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/perf_harness.py +35 -0
  273. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/project_init.py +13 -0
  274. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/reliability.py +279 -0
  275. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/research_manifest.py +72 -0
  276. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/runner.py +105 -0
  277. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/significance.py +46 -0
  278. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/statistical_eval.py +277 -0
  279. jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/verify_release.py +101 -0
  280. jack_data_science_agent-4.1.0/packages/evidence/pyproject.toml +12 -0
  281. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/__init__.py +18 -0
  282. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/failure_taxonomy.py +97 -0
  283. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/graph.py +87 -0
  284. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/models.py +63 -0
  285. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/observability.py +39 -0
  286. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/repro.py +273 -0
  287. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/reproducibility.py +105 -0
  288. jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/validator.py +92 -0
  289. jack_data_science_agent-4.1.0/packages/execution/pyproject.toml +12 -0
  290. jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/__init__.py +3 -0
  291. jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/guardrails.py +59 -0
  292. jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/mime_sniff.py +77 -0
  293. jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/python_sandbox.py +210 -0
  294. jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/sql_guard.py +62 -0
  295. jack_data_science_agent-4.1.0/packages/llm/pyproject.toml +12 -0
  296. jack_data_science_agent-4.1.0/packages/llm/src/dsa_llm/__init__.py +51 -0
  297. jack_data_science_agent-4.1.0/packages/llm/src/dsa_llm/providers.py +62 -0
  298. jack_data_science_agent-4.1.0/packages/mcp/pyproject.toml +12 -0
  299. jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/__init__.py +6 -0
  300. jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/adapter.py +477 -0
  301. jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/app.py +150 -0
  302. jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/server.py +192 -0
  303. jack_data_science_agent-4.1.0/packages/ml/pyproject.toml +12 -0
  304. jack_data_science_agent-4.1.0/packages/ml/src/dsa_ml/__init__.py +1 -0
  305. jack_data_science_agent-4.1.0/packages/plugins/pyproject.toml +13 -0
  306. jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/__init__.py +35 -0
  307. jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/manifest.py +221 -0
  308. jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/plugin.py +33 -0
  309. jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/registry.py +256 -0
  310. jack_data_science_agent-4.1.0/packages/reports/pyproject.toml +12 -0
  311. jack_data_science_agent-4.1.0/packages/reports/src/dsa_reports/__init__.py +1 -0
  312. jack_data_science_agent-4.1.0/packages/statistics/pyproject.toml +12 -0
  313. jack_data_science_agent-4.1.0/packages/statistics/src/dsa_statistics/__init__.py +1 -0
  314. jack_data_science_agent-4.1.0/packages/statistics/src/dsa_statistics/helpers.py +19 -0
  315. jack_data_science_agent-4.1.0/packages/tools/pyproject.toml +12 -0
  316. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/__init__.py +47 -0
  317. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/base.py +72 -0
  318. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/errors.py +14 -0
  319. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/registry.py +27 -0
  320. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/__init__.py +0 -0
  321. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/assumption_check.py +134 -0
  322. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/causal_check.py +128 -0
  323. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/correlation.py +118 -0
  324. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/create_chart.py +167 -0
  325. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/create_evidence.py +48 -0
  326. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/evaluate_model.py +126 -0
  327. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/feature_importance.py +92 -0
  328. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/forecast.py +153 -0
  329. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/generate_report.py +94 -0
  330. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/hypothesis_test.py +180 -0
  331. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/profile_dataset.py +47 -0
  332. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/regression.py +139 -0
  333. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/run_python.py +59 -0
  334. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/run_sql.py +67 -0
  335. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/save_artifact.py +51 -0
  336. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/train_model.py +105 -0
  337. jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/validate_result.py +68 -0
  338. jack_data_science_agent-4.1.0/packages/visualization/pyproject.toml +12 -0
  339. jack_data_science_agent-4.1.0/packages/visualization/src/dsa_viz/__init__.py +1 -0
  340. jack_data_science_agent-4.1.0/plugins/README.md +26 -0
  341. jack_data_science_agent-4.1.0/plugins/dsa-time-series/README.md +99 -0
  342. jack_data_science_agent-4.1.0/plugins/dsa-time-series/manifest.yaml +13 -0
  343. jack_data_science_agent-4.1.0/plugins/dsa-time-series/pyproject.toml +10 -0
  344. jack_data_science_agent-4.1.0/plugins/dsa-time-series/src/dsa_time_series/plugin.py +273 -0
  345. jack_data_science_agent-4.1.0/pyproject.toml +155 -0
  346. jack_data_science_agent-4.1.0/release/sbom.cyclonedx.json +1706 -0
  347. jack_data_science_agent-4.1.0/release/sbom.json +1350 -0
  348. jack_data_science_agent-4.1.0/release/v3.0/README.md +12 -0
  349. jack_data_science_agent-4.1.0/research/V3_RESEARCH_REPORT.md +185 -0
  350. jack_data_science_agent-4.1.0/research/benchmark-showcase.md +20 -0
  351. jack_data_science_agent-4.1.0/research/claim-evidence-matrix.md +19 -0
  352. jack_data_science_agent-4.1.0/research/evidence-trace-showcase.md +62 -0
  353. jack_data_science_agent-4.1.0/research/experiments/ablation_matrix.py +37 -0
  354. jack_data_science_agent-4.1.0/research/experiments/run_ablation.py +82 -0
  355. jack_data_science_agent-4.1.0/research/failure-case-study.md +20 -0
  356. jack_data_science_agent-4.1.0/research/figures/README.md +8 -0
  357. jack_data_science_agent-4.1.0/research/figures/benchmark_by_category.png +0 -0
  358. jack_data_science_agent-4.1.0/research/figures/coverage.png +0 -0
  359. jack_data_science_agent-4.1.0/research/figures/cross_model_frontier.png +0 -0
  360. jack_data_science_agent-4.1.0/research/figures/evidence_trace.png +0 -0
  361. jack_data_science_agent-4.1.0/research/figures/human_eval_rubric.png +0 -0
  362. jack_data_science_agent-4.1.0/research/figures/reproducibility.png +0 -0
  363. jack_data_science_agent-4.1.0/research/paper/V2_paper_draft.md +39 -0
  364. jack_data_science_agent-4.1.0/research/paper/outline.md +7 -0
  365. jack_data_science_agent-4.1.0/research/questions/RQs.md +13 -0
  366. jack_data_science_agent-4.1.0/research/related-work.md +70 -0
  367. jack_data_science_agent-4.1.0/research/reproduction-showcase.md +62 -0
  368. jack_data_science_agent-4.1.0/research/results/_tmp_587c4bf0/raw_runs.json +7625 -0
  369. jack_data_science_agent-4.1.0/research/results/_tmp_587c4bf0/results.json +228 -0
  370. jack_data_science_agent-4.1.0/research/results/_tmp_587c4bf0/summary.json +20 -0
  371. jack_data_science_agent-4.1.0/research/results/_tmp_83058322/raw_runs.json +7625 -0
  372. jack_data_science_agent-4.1.0/research/results/_tmp_83058322/results.json +228 -0
  373. jack_data_science_agent-4.1.0/research/results/_tmp_83058322/summary.json +20 -0
  374. jack_data_science_agent-4.1.0/research/results/_tmp_feb31c61/raw_runs.json +72982 -0
  375. jack_data_science_agent-4.1.0/research/results/_tmp_feb31c61/results.json +2060 -0
  376. jack_data_science_agent-4.1.0/research/results/_tmp_feb31c61/summary.json +56 -0
  377. jack_data_science_agent-4.1.0/research/results/ablation_ablation-587c4bf0.json +101 -0
  378. jack_data_science_agent-4.1.0/research/results/ablation_ablation-83058322.json +101 -0
  379. jack_data_science_agent-4.1.0/research/results/ablation_ablation-feb31c61.json +137 -0
  380. jack_data_science_agent-4.1.0/research/scripts/generate_figures.py +51 -0
  381. jack_data_science_agent-4.1.0/research/scripts/generate_tables.py +53 -0
  382. jack_data_science_agent-4.1.0/research/success-case-study.md +20 -0
  383. jack_data_science_agent-4.1.0/research/tables/README.md +7 -0
  384. jack_data_science_agent-4.1.0/research/tables/ablation.md +3 -0
  385. jack_data_science_agent-4.1.0/research/tables/benchmark_summary.md +17 -0
  386. jack_data_science_agent-4.1.0/research/tables/claim_evidence.md +19 -0
  387. jack_data_science_agent-4.1.0/research/technical-report/README.md +34 -0
  388. jack_data_science_agent-4.1.0/scripts/dev.sh +9 -0
  389. jack_data_science_agent-4.1.0/scripts/generate_benchmark_datasets.py +132 -0
  390. jack_data_science_agent-4.1.0/scripts/generate_benchmark_v2.py +223 -0
  391. jack_data_science_agent-4.1.0/scripts/generate_sbom.py +138 -0
  392. jack_data_science_agent-4.1.0/scripts/run_perf_matrix.py +181 -0
  393. jack_data_science_agent-4.1.0/src/data_science_agent/__init__.py +30 -0
  394. jack_data_science_agent-4.1.0/src/data_science_agent/sdk.py +658 -0
  395. jack_data_science_agent-4.1.0/tests/api/compatibility/test_sdk_compat.py +21 -0
  396. jack_data_science_agent-4.1.0/tests/e2e/.gitkeep +0 -0
  397. jack_data_science_agent-4.1.0/tests/e2e/test_acceptance_v02.py +58 -0
  398. jack_data_science_agent-4.1.0/tests/evals/test_cross_model.py +35 -0
  399. jack_data_science_agent-4.1.0/tests/evals/test_evaluation_framework.py +51 -0
  400. jack_data_science_agent-4.1.0/tests/evals/test_external_validation.py +42 -0
  401. jack_data_science_agent-4.1.0/tests/evals/test_human_eval.py +75 -0
  402. jack_data_science_agent-4.1.0/tests/evals/test_reliability.py +51 -0
  403. jack_data_science_agent-4.1.0/tests/evals/test_statistical_eval.py +86 -0
  404. jack_data_science_agent-4.1.0/tests/integration/.gitkeep +0 -0
  405. jack_data_science_agent-4.1.0/tests/integration/test_agent_analysis.py +156 -0
  406. jack_data_science_agent-4.1.0/tests/integration/test_dataset_api.py +122 -0
  407. jack_data_science_agent-4.1.0/tests/integration/test_phase6_api.py +94 -0
  408. jack_data_science_agent-4.1.0/tests/jupyter/test_jupyter_integration.py +192 -0
  409. jack_data_science_agent-4.1.0/tests/mcp/conformance/test_mcp_conformance.py +156 -0
  410. jack_data_science_agent-4.1.0/tests/mcp/test_mcp_app_acceptance.py +133 -0
  411. jack_data_science_agent-4.1.0/tests/perf/test_w9_performance.py +164 -0
  412. jack_data_science_agent-4.1.0/tests/plugins/test_plugin_isolation.py +98 -0
  413. jack_data_science_agent-4.1.0/tests/plugins/test_plugin_lifecycle.py +120 -0
  414. jack_data_science_agent-4.1.0/tests/plugins/test_time_series_plugin.py +130 -0
  415. jack_data_science_agent-4.1.0/tests/regression/test_regression_matrix.py +115 -0
  416. jack_data_science_agent-4.1.0/tests/sdk/test_cli_contract.py +130 -0
  417. jack_data_science_agent-4.1.0/tests/sdk/test_sdk_contract.py +178 -0
  418. jack_data_science_agent-4.1.0/tests/security/.gitkeep +0 -0
  419. jack_data_science_agent-4.1.0/tests/security/test_adversarial_suite.py +158 -0
  420. jack_data_science_agent-4.1.0/tests/security/test_security_phase8.py +223 -0
  421. jack_data_science_agent-4.1.0/tests/security/test_w7_supply_chain.py +146 -0
  422. jack_data_science_agent-4.1.0/tests/test_w8_external_validation.py +53 -0
  423. jack_data_science_agent-4.1.0/tests/unit/.gitkeep +0 -0
  424. jack_data_science_agent-4.1.0/tests/unit/test_benchmark.py +88 -0
  425. jack_data_science_agent-4.1.0/tests/unit/test_cov_final.py +40 -0
  426. jack_data_science_agent-4.1.0/tests/unit/test_cov_mcp_server_and_llm.py +46 -0
  427. jack_data_science_agent-4.1.0/tests/unit/test_cov_report_and_llm.py +63 -0
  428. jack_data_science_agent-4.1.0/tests/unit/test_coverage_assumption_group.py +48 -0
  429. jack_data_science_agent-4.1.0/tests/unit/test_coverage_final_push.py +60 -0
  430. jack_data_science_agent-4.1.0/tests/unit/test_coverage_gaps.py +185 -0
  431. jack_data_science_agent-4.1.0/tests/unit/test_coverage_push.py +49 -0
  432. jack_data_science_agent-4.1.0/tests/unit/test_data_engine.py +10 -0
  433. jack_data_science_agent-4.1.0/tests/unit/test_datasets.py +142 -0
  434. jack_data_science_agent-4.1.0/tests/unit/test_evidence.py +153 -0
  435. jack_data_science_agent-4.1.0/tests/unit/test_generate_report_coverage.py +64 -0
  436. jack_data_science_agent-4.1.0/tests/unit/test_imports.py +7 -0
  437. jack_data_science_agent-4.1.0/tests/unit/test_langgraph.py +34 -0
  438. jack_data_science_agent-4.1.0/tests/unit/test_mcp.py +120 -0
  439. jack_data_science_agent-4.1.0/tests/unit/test_more_coverage.py +81 -0
  440. jack_data_science_agent-4.1.0/tests/unit/test_more_gaps.py +81 -0
  441. jack_data_science_agent-4.1.0/tests/unit/test_reliability_repro_failure_obs.py +52 -0
  442. jack_data_science_agent-4.1.0/tests/unit/test_significance.py +13 -0
  443. jack_data_science_agent-4.1.0/tests/unit/test_tools.py +245 -0
  444. jack_data_science_agent-4.1.0/tests/unit/test_trajectory.py +58 -0
  445. jack_data_science_agent-4.1.0/tests/unit/test_v02_tools.py +105 -0
  446. jack_data_science_agent-4.1.0/tests/unit/test_v03_tools.py +135 -0
  447. jack_data_science_agent-4.1.0/tests/vscode/test_vscode_extension.py +105 -0
  448. jack_data_science_agent-4.1.0/uv.lock +4231 -0
@@ -0,0 +1,8 @@
1
+ # CODEOWNERS (§69)
2
+ * @jackson
3
+ /packages/agent/ @jackson
4
+ /packages/statistics/ @jackson
5
+ /packages/ml/ @jackson
6
+ /packages/mcp/ @jackson
7
+ /docs/ @jackson
8
+ /benchmarks/ @jackson
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a bug
4
+ labels: bug
5
+ ---
6
+
7
+ **Describe the bug**
8
+ **Steps to reproduce**
9
+ **Expected behavior**
10
+ **Environment (uv run dsa doctor)**
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest a feature or plugin idea
4
+ labels: enhancement
5
+ ---
6
+
7
+ **Is your feature related to a problem?**
8
+ **Describe the solution**
9
+ **Additional context**
@@ -0,0 +1,13 @@
1
+ ## What does this PR do?
2
+
3
+ ## How to test
4
+
5
+ - [ ] `uv run ruff check packages apps/api tests`
6
+ - [ ] `uv run mypy packages apps/api --ignore-missing-imports`
7
+ - [ ] `uv run pytest -q`
8
+ - [ ] `uv run dsa demo` (if CLI/DX touched)
9
+
10
+ ## Checklist
11
+
12
+ - [ ] No breaking public API without SemVer bump
13
+ - [ ] Docs updated if needed
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: "/"
5
+ schedule: { interval: weekly }
6
+ - package-ecosystem: npm
7
+ directory: "/apps/web"
8
+ schedule: { interval: weekly }
9
+ - package-ecosystem: docker
10
+ directory: "/"
11
+ schedule: { interval: weekly }
@@ -0,0 +1,23 @@
1
+ name: CI
2
+ on: [push, pull_request]
3
+ jobs:
4
+ ci:
5
+ runs-on: ubuntu-latest
6
+ steps:
7
+ - uses: actions/checkout@v4
8
+ - uses: actions/setup-python@v5
9
+ with: { python-version: "3.12" }
10
+ - run: pip install uv
11
+ - run: uv sync --dev
12
+ - run: uv lock --check # §46 dependency pinning
13
+ - run: uv run ruff check packages apps/api tests src apps/jupyter
14
+ - run: uv run ruff format --check packages apps/api tests src apps/jupyter
15
+ - run: uv run mypy packages apps/api src --ignore-missing-imports
16
+ - run: uv run pytest -q --cov --cov-report=term-missing
17
+ - run: uv run python scripts/generate_sbom.py && test -f release/sbom.json # §47 SBOM
18
+ - run: uv run dsa --limit 5 --out /tmp/ci-bench --catalog benchmarks/ds-agent-benchmark/catalog.json --datasets benchmarks/ds-agent-benchmark/datasets 2>&1 | tail -n 20
19
+ - run: docker build -f docker/Dockerfile.api -t dsa-api:ci .
20
+ - run: docker build -f docker/Dockerfile.web -t dsa-web:ci .
21
+ - run: npm --prefix apps/web run build 2>&1 | tail -n 20
22
+ - run: docker compose config 2>&1 | head -n 40
23
+ - run: uv run python -m mkdocs build --strict 2>&1 | tail -n 50
@@ -0,0 +1,36 @@
1
+ name: "CodeQL"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ - cron: "0 6 * * 1" # weekly
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze (${{ matrix.language }})
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+ security-events: write
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ language: ["python", "javascript"]
23
+ steps:
24
+ - name: Checkout
25
+ uses: actions/checkout@v4
26
+ - name: Initialize CodeQL
27
+ uses: github/codeql-action/init@v3
28
+ with:
29
+ languages: ${{ matrix.language }}
30
+ queries: security-and-quality
31
+ - name: Autobuild
32
+ uses: github/codeql-action/autobuild@v3
33
+ - name: Perform CodeQL Analysis
34
+ uses: github/codeql-action/analyze@v3
35
+ with:
36
+ category: "/language:${{matrix.language}}"
@@ -0,0 +1,23 @@
1
+ name: "Dependency Review"
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ permissions:
8
+ contents: read
9
+ pull-requests: read
10
+
11
+ jobs:
12
+ dependency-review:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Checkout
16
+ uses: actions/checkout@v4
17
+ - name: Dependency Review
18
+ uses: actions/dependency-review-action@v4
19
+ with:
20
+ fail-on-severity: high
21
+ fail-on-scopes: runtime
22
+ comment-summary-in-pr: always
23
+ allow-licenses: MIT, Apache-2.0, BSD-3-Clause, ISC, PSF, Python-2.0
@@ -0,0 +1,18 @@
1
+ name: "Secret Scan"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ gitleaks:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+ - uses: gitleaks/gitleaks-action@v2
17
+ env:
18
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,37 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.pyo
4
+ .mypy_cache/
5
+ .ruff_cache/
6
+ .pytest_cache/
7
+ .coverage
8
+ htmlcov/
9
+ .venv/
10
+ venv/
11
+ node_modules/
12
+ .next/
13
+ dist/
14
+ build/
15
+ *.egg-info/
16
+ .env
17
+ .env.local
18
+ /data/projects/
19
+ /data/datasets/
20
+ /artifacts/
21
+ packages/artifacts/
22
+ demo/reports/
23
+ /reports/
24
+ models/
25
+ logs/
26
+ .DS_Store
27
+ *.db
28
+ *.sqlite
29
+ *.sqlite3
30
+ apps/data/
31
+ apps/web/node_modules
32
+ reproduction/
33
+ plugins/.registry_state.json
34
+ dist/
35
+ site/
36
+ apps/vscode/out/
37
+ apps/vscode/node_modules/
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.4.9
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,351 @@
1
+ # Data Science Agent — Phase 0 Architecture Freeze (V0.1)
2
+
3
+ > Status: FROZEN for V0.1 implementation | Date: 2026-08-15
4
+ > Principle: Evidence Before Claim | Code Before Claim | Statistical Rigor Before Fluency
5
+
6
+ ---
7
+
8
+ ## 1. System Architecture (Layered)
9
+
10
+ ```
11
+ ┌─────────────────────────────────────────────────────┐
12
+ │ Frontend Next.js 15 + TypeScript + Tailwind + │
13
+ │ shadcn/ui + Plotly (SSE client) │
14
+ └──────────────────────┬──────────────────────────────┘
15
+ │ HTTPS / SSE
16
+ ┌──────────────────────▼──────────────────────────────┐
17
+ │ API Layer FastAPI + Pydantic v2 + SQLAlchemy │
18
+ │ /api/v1/datasets /analysis /artifacts /reports │
19
+ │ Auth (future) · Validation · Rate Limit · Logging │
20
+ └──────────────────────┬──────────────────────────────┘
21
+
22
+ ┌──────────────────────▼──────────────────────────────┐
23
+ │ Agent Runtime LangGraph Stateful Graph │
24
+ │ Planner → DataScientist → Critic → Report │
25
+ │ State: AnalysisState · Checkpoints · Retry(3) │
26
+ └──────────────────────┬──────────────────────────────┘
27
+
28
+ ┌──────────────────────▼──────────────────────────────┐
29
+ │ Tool Layer Typed Tool Contract (async execute) │
30
+ │ Data | SQL | Python | Stats | ML | Viz | Evidence │
31
+ └──────┬──────────┬───────────┬───────────┬───────────┘
32
+ │ │ │ │
33
+ DuckDB Python Sandbox Stats/ML Viz Engine
34
+ + Polars (restricted) (scipy/ (Plotly/
35
+ + PyArrow AST+seccomp sklearn) Matplotlib)
36
+ │ │ │ │
37
+ └──────────┴───────────┴───────────┘
38
+
39
+ ┌──────────────────────▼──────────────────────────────┐
40
+ │ Evidence & Reproducibility Layer │
41
+ │ Evidence Graph · Artifact Store · experiment.json │
42
+ │ + reproduce.sh + analysis.ipynb │
43
+ └──────────────────────┬──────────────────────────────┘
44
+
45
+ ┌──────────────────────▼──────────────────────────────┐
46
+ │ Storage SQLite (MVP) / Postgres · Local FS │
47
+ │ projects/datasets/analysis_runs/tool_calls/ │
48
+ │ artifacts/evidence/insights/reports │
49
+ └─────────────────────────────────────────────────────┘
50
+ LLM Abstraction: LLMProvider → OpenAI/Anthropic/Google/OpenRouter/Ollama
51
+ Cache: Local File Cache (DatasetProfile/SQL/Python/LLM) OTel: optional
52
+ ```
53
+
54
+ **Why layered:** Separation of Concerns, Dependency Injection (API → Agent → Tool → Engine), testability, MCP adapter can wrap Tool Layer without leaking into domain.
55
+
56
+ ---
57
+
58
+ ## 2. Component Diagram
59
+
60
+ ```
61
+ apps/api → FastAPI app, routers, SSE, DI container
62
+ apps/web → Next.js app router, Dashboard/Projects/Datasets/Analysis/Reports
63
+
64
+ packages/agent → LangGraph graph, 4 agents, state, prompts, guardrails
65
+ packages/tools → Tool registry, base Tool class, 20+ tools
66
+ packages/execution→ Python Sandbox (AST validator + subprocess jail), SQL validator
67
+ packages/statistics → descriptive/correlation/hypo/regression engine + assumption checker
68
+ packages/ml → leakage detector, model selector, trainer, evaluator
69
+ packages/visualization → chart recommender + Plotly/Matplotlib generators
70
+ packages/evidence → Evidence / Insight / validation, graph builder
71
+ packages/reports → Markdown/HTML/PDF/Notebook builder
72
+ packages/datasets → upload, registry, profiling, DuckDB/Polars adapters, hash
73
+ packages/mcp → MCP adapter (stateless, 2026-07-28 spec) wraps Tool Layer
74
+
75
+ Shared: packages/llm (LLMProvider), packages/cache, packages/observability, packages/security
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 3. Repository Tree (Monorepo, frozen)
81
+
82
+ ```
83
+ data-science-agent/
84
+ ├── apps/
85
+ │ ├── api/ # FastAPI
86
+ │ │ ├── src/dsa_api/{routers,services,models,core}
87
+ │ │ └── tests/
88
+ │ └── web/ # Next.js 15
89
+ │ ├── app/(dashboard|projects|datasets|analysis|reports|settings)/
90
+ │ ├── components/ui/ # shadcn
91
+ │ └── lib/
92
+ ├── packages/
93
+ │ ├── agent/ # LangGraph
94
+ │ │ ├── prompts/{planner,data_scientist,critic,report}/v1.yaml
95
+ │ │ ├── state.py # AnalysisState
96
+ │ │ ├── graph.py # StateGraph
97
+ │ │ └── agents/{planner,scientist,critic,report}.py
98
+ │ ├── tools/ # Tool contracts + implementations
99
+ │ ├── execution/ # python sandbox + sql validator
100
+ │ ├── statistics/ # stats engine
101
+ │ ├── ml/ # ml + leakage
102
+ │ ├── visualization/ # viz engine
103
+ │ ├── evidence/ # evidence graph
104
+ │ ├── reports/ # report generators
105
+ │ ├── datasets/ # dataset layer
106
+ │ ├── llm/ # LLMProvider abstraction
107
+ │ └── mcp/ # MCP server (adapter)
108
+ ├── tests/{unit,integration,e2e,security}/
109
+ ├── benchmarks/ds-agent-benchmark/ # 20 datasets, 50 tasks
110
+ ├── examples/{datasets,analyses}/
111
+ ├── docs/ # MkDocs
112
+ ├── scripts/
113
+ ├── docker/{Dockerfile,compose.yml}
114
+ ├── .github/workflows/ci.yml
115
+ ├── pyproject.toml (uv) package.json README.md LICENSE (MIT)
116
+ ├── CONTRIBUTING.md SECURITY.md CODE_OF_CONDUCT.md THIRD_PARTY_LICENSES.md
117
+ └── .commandcode/
118
+ ```
119
+
120
+ Tooling: `uv` (dep), `Ruff` (lint/fmt), `MyPy` (strict), `Pytest+coverage`, `pre-commit`, `Docker`
121
+
122
+ ---
123
+
124
+ ## 4. Agent State Machine (LangGraph StateGraph, explicit)
125
+
126
+ ```
127
+ START
128
+
129
+ UNDERSTANDING (Supervisor/Planner parses user_query + dataset profile)
130
+
131
+ PLANNING (produce AnalysisPlan: objective, assumptions, steps, tools, outputs)
132
+
133
+ DATA_PROFILING (profile_dataset, schema, missing, duplicates, outliers)
134
+
135
+ ANALYSIS (EDA, correlation, hypothesis_test — Data Scientist)
136
+
137
+ MODELING (feature eng, train_model, leakage check — optional by task)
138
+
139
+ VALIDATION (Critic: stats validity, leakage, calc correctness, evidence completeness)
140
+ ├─ FAIL → CorrectionRequest → back to ANALYSIS/MODELING (max 3 retries)
141
+ └─ PASS → SYNTHESIS
142
+
143
+ SYNTHESIS (Insight engine: Finding+Evidence+Magnitude+Limitation)
144
+
145
+ REPORTING (Report Agent: Markdown/HTML/PDF + Notebook + experiment.json + reproduce.sh)
146
+
147
+ COMPLETED
148
+
149
+ ERROR → RECOVERY → RETRY (≤3) → else HUMAN_REVIEW (WAITING_FOR_APPROVAL)
150
+ Cost guard: max_tokens / max_steps / max_tool_calls / max_time → STOP
151
+ ```
152
+
153
+ V0.1 agents: `Planner`, `Data Scientist`, `Critic`, `Report` (4). Supervisor responsibilities merged into Planner for V0.1; expand to 8 agents in V0.2+.
154
+
155
+ ---
156
+
157
+ ## 5. Database ERD (SQLite MVP)
158
+
159
+ ```
160
+ projects (id PK, name, description, created_at)
161
+ 1──n datasets (id PK, project_id FK, filename, path, hash, format, rows, cols, metadata JSON, created_at)
162
+ 1──n analysis_runs (id PK, project_id FK, dataset_id FK, user_query, objective, status ENUM, plan JSON, current_step, report_id FK, error, budget JSON, created_at)
163
+ 1──n agent_steps (id PK, run_id FK, agent, state, input JSON, output JSON, duration_ms, status)
164
+ 1──n tool_calls (id PK, run_id FK, step_id FK, tool_name, input JSON, output JSON, status, duration_ms, error)
165
+ 1──n artifacts (id PK, run_id FK, type ENUM[dataset,code,sql,table,chart,model,notebook,report,evidence], path, metadata JSON, created_by, created_at)
166
+ 1──n evidence (id PK, run_id FK, claim, source_type ENUM[sql,python,statistical_test,model,visualization], source_id FK→tool_calls/artifacts, result JSON, confidence, validation_status)
167
+ 1──n insights (id PK, run_id FK, finding, evidence_ids JSON, magnitude, significance, limitation, created_at)
168
+ 1──1 reports (id PK, run_id FK, markdown_path, html_path, pdf_path, notebook_path, experiment_json_path, created_at)
169
+ users (future, id PK, email) — not in V0.1 MVP
170
+ ```
171
+
172
+ Indexes: `analysis_runs(status)`, `tool_calls(run_id, tool_name)`, `evidence(run_id)`.
173
+
174
+ ---
175
+
176
+ ## 6. Core Domain Models (Pydantic, typed)
177
+
178
+ ```python
179
+ class AnalysisStatus(str, Enum): UNDERSTANDING, PLANNING, DATA_PROFILING, ANALYSIS, MODELING, VALIDATION, SYNTHESIS, REPORTING, COMPLETED, FAILED, HUMAN_REVIEW
180
+
181
+ class AnalysisStep(BaseModel): id: str; name: str; description: str; tool: str; inputs: dict; depends_on: list[str]
182
+
183
+ class AnalysisPlan(BaseModel): objective: str; assumptions: list[str]; steps: list[AnalysisStep]; required_tools: list[str]; expected_outputs: list[str]
184
+
185
+ class AnalysisState(BaseModel):
186
+ run_id: str; project_id: str; dataset_id: str
187
+ user_query: str; objective: str
188
+ plan: list[AnalysisStep]; current_step: int
189
+ agent_messages: list[AgentMessage]; tool_calls: list[ToolCall]
190
+ artifacts: list[Artifact]; evidence: list[Evidence]
191
+ validation_results: list[ValidationResult]; insights: list[Insight]
192
+ report_id: str | None; status: AnalysisStatus; error: str | None
193
+
194
+ class Evidence(BaseModel):
195
+ id: str; claim: str
196
+ source_type: Literal["sql","python","statistical_test","model","visualization"]
197
+ source_id: str; result: dict; confidence: float; validation_status: str # pending/verified/failed
198
+
199
+ class Artifact(BaseModel): id: str; type: ArtifactType; path: str; metadata: dict; created_by: str; created_at: datetime
200
+
201
+ class EvidenceGraph: Insight → Evidence → Computation(ToolCall) → Dataset (traceable)
202
+ ```
203
+
204
+ Reproducibility bundle: `experiment.json` = {dataset_hash, schema, python_version, package_versions, llm_provider/model, prompt_version, seed, SQL, code, params, model_config, timestamp}
205
+
206
+ ---
207
+
208
+ ## 7. Tool Contracts (uniform, typed, validated)
209
+
210
+ ```python
211
+ class Tool(BaseModel):
212
+ name: str; description: str; input_schema: type[BaseModel]; output_schema: type[BaseModel]
213
+ async def execute(self, input: ToolInput) -> ToolOutput: ...
214
+
215
+ # Contract guarantees: input validation (Pydantic) → permission check → execution → output validation → evidence emission
216
+ ```
217
+
218
+ **V0.1 required tools (≥22):**
219
+
220
+ | Tool | Input | Output |
221
+ |------|-------|--------|
222
+ | `profile_dataset` | dataset_id | DatasetProfile (rows/cols/dtypes/missing/duplicates/cardinality/distribution) |
223
+ | `inspect_schema` | dataset_id | schema |
224
+ | `describe_columns` | dataset_id | stats per column |
225
+ | `detect_missing_values` | dataset_id | missing map |
226
+ | `detect_duplicates` | dataset_id | dup count/rows |
227
+ | `detect_outliers` | dataset_id, method | outliers |
228
+ | `run_sql` | sql (read-only, DuckDB) | rows + columns |
229
+ | `run_python` | code (sandbox) | stdout/stderr/plots/variables |
230
+ | `correlation_analysis` | cols, method[pearson/spearman/kendall] | r, p, CI, interpretation |
231
+ | `hypothesis_test` | test[t/welch/mannwhitney/anova/kruskal/chisq/fisher], cols | statistic, p, CI, effect_size, assumptions, interpretation, limitations |
232
+ | `regression_analysis` | type[linear/logistic/ridge/lasso/elastic], X, y | coef, metrics, diagnostics |
233
+ | `train_model` | task, X,y, candidates, cv | model_id, cv_scores |
234
+ | `evaluate_model` | model_id, metrics | Accuracy/Precision/Recall/F1/ROC/PR or MAE/MSE/RMSE/R2 |
235
+ | `feature_importance` | model_id | importance + plot |
236
+ | `create_chart` | spec → Plotly | chart artifact |
237
+ | `save_artifact` | type, content | artifact_id |
238
+ | `create_evidence` | claim, source | evidence_id |
239
+ | `validate_result` | evidence_id | ValidationResult |
240
+ | `generate_report` | run_id | report paths |
241
+
242
+ All tools: `Typed Input/Output`, `Validation`, `Error Handling`, `Unit Tests`, `Cost/Latency logged`.
243
+
244
+ ---
245
+
246
+ ## 8. Evidence Model & Graph
247
+
248
+ Every Insight must trace:
249
+
250
+ ```
251
+ Insight #003: "East region revenue +27.4% (highest)"
252
+ ├─ Evidence E-014 {claim, source_type=sql, source_id=TC-042, result={East:27.4,South:18.2,North:12.1}, confidence=0.92, validation=verified}
253
+ │ ├─ ToolCall TC-042 run_sql: SELECT region, growth FROM ...
254
+ │ └─ Dataset D-001 sales.csv hash=sha256:...
255
+ ├─ Chart C-007 Revenue Growth by Region (bar)
256
+ └─ Validation V-014 {aggregation verified, missing checked, n=...}
257
+ ```
258
+
259
+ Unsupported-claim guard: output guardrail rewrites `causes/impact/effect` → `associated with` unless causal inference evidence exists.
260
+
261
+ ---
262
+
263
+ ## 9. API Specification (FastAPI, /api/v1)
264
+
265
+ ```
266
+ POST /datasets → upload (multipart, validate size/ext/MIME/traversal) → dataset_id
267
+ GET /datasets/{id} → profile + metadata
268
+ POST /analysis → {dataset_id, task} → run_id (creates AnalysisRun, enqueues graph)
269
+ GET /analysis/{id} → AnalysisState (polling fallback)
270
+ GET /analysis/{id}/events → SSE: agent_started, agent_completed, tool_started, tool_completed, analysis_progress, validation_started/completed, report_generated
271
+ GET /analysis/{id}/artifacts → list artifacts
272
+ GET /analysis/{id}/report → markdown/html/pdf/notebook
273
+ POST /analysis/{id}/approve → human-in-the-loop approval
274
+ GET /health GET /version
275
+
276
+ Event schema: {event, agent, tool, status, timestamp, duration_ms, run_id}
277
+ ```
278
+
279
+ Auth: none in V0.1 (local-first). Storage: `data/projects/{id}/artifacts/...`
280
+
281
+ ---
282
+
283
+ ## 10. Security Boundary
284
+
285
+ ```
286
+ Untrusted perimeter: uploaded files + dataset cell text + user task
287
+
288
+ File Security: max_size (100MB MVP), allowlist [csv,parquet,json,xlsx], MIME sniff, filename sanitization, path traversal block, zip bomb check, hash
289
+
290
+ SQL Boundary: SQL Validation → allowlist read-only; deny DROP/DELETE/UPDATE/INSERT/ALTER/ATTACH/COPY; DuckDB read-only connection; row limit
291
+
292
+ Python Boundary: Static AST validation → deny os/subprocess/socket/requests/eval/exec/open(file beyond workdir) → Sandbox (subprocess jail, no net, no env, tmp WorkDir, timeout, mem limit) → capture stdout/stderr/plots only
293
+
294
+ Prompt Injection: all dataset content tagged UNTRUSTED DATA; system prompt instructs to treat as data; input guardrail scans for "ignore previous instructions"
295
+
296
+ Output Guardrail: Unsupported Claim Detection (causal language without causal evidence) + Evidence Coverage check before report
297
+
298
+ Resource Limits: max_tokens, max_steps, max_tool_calls, max_time → STOP with message
299
+ Human-in-the-loop: delete/overwrite/unrestricted code/large compute/network → WAITING_FOR_APPROVAL
300
+ Logging: JSON structured, no secrets; API keys only env vars
301
+ ```
302
+
303
+ ---
304
+
305
+ ## 11. Technology Decision Record (TDR)
306
+
307
+ | Decision | Chosen | Rejected | Why |
308
+ |----------|--------|----------|-----|
309
+ | Frontend | Next.js 15 + TS + Tailwind + shadcn + Plotly | CRA, Vue | SSR, app router, ecosystem, shadcn quality, Plotly statistical charts |
310
+ | Backend | FastAPI + Pydantic v2 + SQLAlchemy | Flask, Django | async, auto OpenAPI, typed, DI, SSE |
311
+ | Agent Framework | **LangGraph** | OpenAI Agents SDK (also MIT) | Explicit StateGraph, checkpoints, conditional routing, retry/recovery, long-running — required by spec §8; single framework rule |
312
+ | Data Engine | DuckDB + Polars + PyArrow | Pandas-only, Spark | Local analytical SQL, zero-cost, reads CSV/Parquet natively, Arrow interop, avoids loading all into memory |
313
+ | DB | SQLite (MVP) → Postgres | MySQL, Redis | Zero-dep local, file cache; Postgres for prod without code change (SQLAlchemy) |
314
+ | LLM Abstraction | Custom LLMProvider (async generate/structured_output/stream) | LangChain LLM wrapper | Lightweight, provider-agnostic, supports OpenAI/Anthropic/Google/OpenRouter/Ollama, no lock-in |
315
+ | Cache | Local File Cache | Redis Cloud | Free-first, no paid dependency |
316
+ | Observability | OTel-compatible interface, optional | Datadog | No SaaS requirement |
317
+ | Package Mgr | uv + Ruff + MyPy + Pytest | Poetry + flake8 | Speed, modern, strict typing |
318
+ | MCP | Adapter layer over Tool Layer | MCP everywhere | Domain not dependent on MCP; stateless 2026-07-28 spec |
319
+
320
+ Risks: LangGraph version churn → pin; DuckDB memory on huge files → Polars streaming fallback; LLM cost → budget guards + local Ollama default.
321
+
322
+ ---
323
+
324
+ ## 12. Development Roadmap (Phased, test-gated)
325
+
326
+ ```
327
+ Phase 0 Architecture Freeze ← WE ARE HERE (no business code)
328
+ Phase 1 Repository Scaffold Monorepo, uv, Next.js, FastAPI, SQLite, DuckDB, Polars, Pytest/Ruff/MyPy/Docker/CI → all tests pass
329
+ Phase 2 Data Layer upload/registry/schema/profiling/DuckDB/Polars/hash → CSV/Parquet/large/malformed tests
330
+ Phase 3 Tool Layer 20+ tools typed+validated+unit-tested
331
+ Phase 4 Agent Graph 4 agents via LangGraph, explicit state/transitions/retry/human approval
332
+ Phase 5 Evidence System Evidence/Insight model, graph, traceability, validation
333
+ Phase 6 API Dataset/Analysis/SSE/Artifact/Report endpoints
334
+ Phase 7 Frontend Dashboard/Datasets/Analysis workspace/Trace/Charts/Evidence/Reports
335
+ Phase 8 Security Sandbox, injection defense, file/SQL guards, limits
336
+ Phase 9 Benchmark DS-Agent-Benchmark 20 datasets/50 tasks/5 categories + metrics
337
+ Phase 10 MCP Server 10+ tools, decoupled adapter
338
+ Phase 11 Documentation README (demo/arch/quickstart/benchmark), MkDocs, examples
339
+
340
+ Per-phase gate: Implement → Test → Run → Review → Fix → Commit
341
+ Quality gates before report: Data → Statistical → Code → Model → Evidence → UnsupportedClaim → Report
342
+ Final acceptance: "Analyze why revenue declined and forecast 30 days" + Titanic survival task → full E2E reproducible
343
+ ```
344
+
345
+ **What NOT to build in V0.1:** K8s, microservices, cloud deploy, billing, multi-tenancy, mobile, social, custom foundation model, distributed GPU, complex RAG, vector DB, real-time collaboration.
346
+
347
+ ---
348
+
349
+ ### Next Step
350
+
351
+ > Awaiting **Architecture Confirmation** before proceeding to Phase 1 (Scaffold). No business code will be written until freeze is approved.